OK, this question seems to have popped up quite a lot, and it's really quite simple, so here's some details about how to open secondary forms from a main form.
Example
We have a main form. The user clicks "New Order", where the order form pops up. But how does it pop up?
Instance and Static
This is how C# differs to VB. In VB, you have one copy of each form. You can hide and show this form any time you like, but there is one form. You can toggle visibility by using Show() or Hide().
C#, on the other hand, is very different. Here we can only use instance members. What this means is that there is no single copy of the form - if you want to open a form, you must create a new "version" of the form, and display this to the user.
Classes and Objects
In VB, a form name in the code would refer to the actual form object. By typing a period (.), we could access the properties of the form. In C#, the form name is a class. Therefore, we cannot access any properties directly from it. We must create a new object variable, and use the form class to fashion it to the shape of the form we want to show.
The Code
To open the order form, we would do something like this:
[HIGHLIGHT=csharp]
frmOrder form = new frmOrder();
form.ShowDialog();
[/HIGHLIGHT]
Notice how the frmOrder form (the name of our order form) is being used as a class - the actual form object is called "form". Therefore, to access its properties we refer to this, and not the form class.
Suppose we wanted to know the result of the order form:
[HIGHLIGHT=csharp]
frmOrder form = new frmOrder();
if (form.ShowDialog() == DialogResult.OK)
{
MessageBox.Show("You selected the " + form.txtOrder.Text + " item!");
}
else
{
MessageBox.Show("Oh well, maybe next time!");
}
[/HIGHLIGHT]
First, we check the DialogResult enumeration that ShowDialog() returns. If it is DialogResult.OK (under a couple of namespaces, of course) then we grab the contents of the txtOrder textbox on the form. If not, we display a cancellation note (you don't have to do this, of course).
Conclusion
I hope this will be helpful - especially for those migrating from VB to C#. Bear this in mind, and creating new forms will be a doddle.
Xav
Nice tutorial![]()
Ask Jordan for them. I'm not the one that hands them out.
Nice Tutorial .. Xav+rep when it lets me to ..
![]()
Nice read. I've seen this question crop up before and I've heard people ask it in person. I prefer instantiating the class/form rather than Visual Basic's ... method? I believe me or someone on here also wrote a tutorial on how to do this using Visual C++ forms. A tricky thing in Visual C++ is accessing the parent form from the child form. Not creating a new parent class but actually accessing the current instance of the parent form. Perhaps this could be your next C# tutorial?
Anyway, I awarded you your 20 points before I closed the contest. Congrats!
Luv the tutorial
This is great, but how would you use variables from the other form in the new form, I ask this because i was trying to make my own notepad and wanted to add a find button so you could search through text and what not, and i knew how to open a new form but i could not for the life of me figure out how to use variables and objects from the parent form,
There are currently 6 users browsing this thread. (0 members and 6 guests)
Bookmarks