I'm looking to have a navigation pane on the left side of my form which will change the right side of the form accordingly. I could always use panels and store the controls on the panels but is there a better way to do this? A tab control would be nice but I wouldn't want to see the actual tabs ...
Is there a way to do this?
Edit after seeing the answer:
Dim uc As New UserControl1
Form1.Controls.Add(uc)
Will add everything in the user control to the form1. Alternatively, if I had a Panel, I could do:
Panel1.controls.add(uc)
That would add it to the panel.
You can use panels, but you could also have your panes as UserControls and load them into a single panel instance, or even directly into the form.
Putting them into UserControls also means your form's generated class won't be cluttered with control members.
I would have to agree with #Dai Here is a great thread on it. It explains how to setup the panels in the ide.
Related
We're developing a custom control (to make our lives easier), which included a customs (external) grid control and some default buttons and text. The grid control has the option to add columns by clicking the small arrow on the top right of the grid in designer, like shown in the picture.
We want to keep this option when putting our new custom control on a (win)form. Is there any way we can achieve this?
I've already looked into the 'verbs' and I can add my own custom verbs to the new control, but I'm not sure the arrow is a verb (as it does not show the option on the bottom of the properties). I also haven't been able to find how to use the verbs from the grid control.
Thank you very much!
I've found the solution to my problem.
I thought the way to add columns was a custom control when in reality, it was a default CollectionEditor. This, in combination with Smart Tag, solved my problem.
i was wondering if it was possible to hide everything at once in windows forms, i was planning to use a drop down which made things appear and disappear but i wanted everything hidden at the beginning for simplicity.
Thanks!
On the form, add a Panel control (found in the Containers section of the toolbox).
Set the Visible value of the Panel to be False.
Add all controls inside this panel. You can then make the panel visible and hidden via code. (no need to cycle through all controls on the form)
I'm not sure if this is at all possible, but I'd like to be able to 'embed' a CommandBar into an Access 2003 Form.
I'd like to do this because the nature of my application is such that its forms are 'floating' so it doesn't look like it was developed in Access.
I know I can put Command Buttons on the form, which would achieve something similar, but I'd like a way to differentiate between the two types of buttons.
I'll be using it (if it's possible) to have a help menu present on some Forms.
Any ideas would be greatly appriciated!
I managed to achieve a similar effect by placing labels of a different color at the top of the form, then assign custom context menus to appear on left click. This is similar to the code found here:
How to add a menu item to the default right click context menu
I am writing a Windows Forms application in VB.NET. I have three forms: the main form, which shows a list of accounts, the account form which allows the user to view/edit the information for a specific account, and the policy form which allows the user to view/edit the information on a specific policy for that account. I want the forms to appear as if they are all the same window. Example: when the application starts, the user clicks an account name in the list box on the main form and clicks "edit". What I want to happen is that the window stays in the exact same place and stays the same exact size, only the content of the main form appears to be replaced with the content of the account form. Same thing if the user then chooses to edit a policy from the account form. When the user finishes and clicks "save", the main form comes back up. Through this entire use case, it would appear to the user as if they were viewing the same window the entire time, with the content of that window changing.
How can I do this? I have tried something like:
Dim newForm as New AcctForm
newForm.Location = Me.Location
newForm.Show()
Me.Close()
The problem is that if the user moves the original window, the new window appears where the parent form originally appeared, not where it ended up.
I see this is already in the comments, but what I have done in this case in the past is build each "form" in the application as a custom control. Then I have one actual form, and navigation works by changing which custom control is currently loaded on the parent form. To move from one screen/view to another, you remove the current custom control from the form's controls collection and add the new custom control.
I believe this is superior to manually setting the startup position and size, because you can use the form's .SuspendLayout()/.ResumeLayout() methods to hide the interim state, where there is no control loaded, from the user. This is harder to do when you want one form to be completely replaced by another.
This also makes it easy to set certain form properties in one place and have them be consistent for the application. You can even have an area on the form with controls that will now show in every view.
When using this pattern, I typically have each of my custom controls inherit from a common base. You may not have anything specific you will do with that base at the outset, but it almost always comes in handy later.
Finally, switching to use this scheme is easier than you think. Just go to the code for the each of your current forms, and you will find that each class currently inherits from System.Windows.Forms.Form. Most of the time, all you really need to do is change them to inherit from System.Windows.Forms.Panel and you're most of the way there.
As others have said, it may be better to redesign your application using custom controls or panels etc.
However, to answer your question regarding the seemingly random location of your forms, the first thing to check is that each form has it's StartPosition property set to Manual.
If your main form is resizable, then I would also add code to adjust newForm to the same size too.
I hope that helps with your immediate issues; so that you can move on to redesigning the application!
good morning there is another way . set property for second form to (top most) and use also
from2.show();
that make you switch between forms and keep form2 top other
Thanks
try using ShowDialog()
Dim newForm as New AcctForm
newForm.Location = Me.Location
newForm.ShowDialog()
Me.Close() <-- removed this
I have a tab control with two tabs. Both tabs have controls which are unique to them, but there is one control which I would like to always appear on whichever tab is currently active.
I figure I just need to add some code to TabControl1_SelectedIndexChanged().
I tried
MyControl.Parent = TabControl1.TabPages(
TabControl1.TabPages.IndexOf(TabControl1.SelectedTab))
MyControl.Parent.Update() ' is this necessary?
and I also tried
TabControl1.TabPages(
TabControl1.TabPages.IndexOf(TabControl1.SelectedTab)).Controls.Add(SeMyControl)
but neither worked (the control moved once, but when I went back to the original tab, the control did not appear there.
googling found someone suggesting
TabControl1.TabPages(TabControl1.TabIndex).Controls.Add(MyControl)
but that looks dodgy as the control is never removed from the old tab, so repeated switching would probably add the control multiple times.
I feel that I am close, but not quite ... how do I do it?
No, that works fine since Controls.Add() changes the Parent property. Which automatically removes it from the tab page it was on before. A control instance can only have one parent.
The more straight-forward approach is to simply not put the control on a tab page but leave it parented to the form which a lower Z-order so it is always on top of the tab control. The only problem with that is that the designer will hassle you. It automatically sucks the control into the tab page when you move it on top of the tab control. One trick to fix that is to leave it off the tab control and change its Location property in the form constructor.
Using your second code snippet that you are concerned about because it doesn't remove it from the original tab, why not just remove it from the original tab before you add it to the new tab?
Maybe something like: TabControl1.TabPages(TabControl1.TabIndex).Controls.Remove(MyControl)