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
12 replies to this topic
|
|
|
#2
Posted 20 November 2008 - 12:55 PM
Nice tutorial :)
#4
Posted 20 November 2008 - 01:01 PM
Ask Jordan for them. I'm not the one that hands them out.
#6
Posted 20 November 2008 - 01:30 PM
Nice Tutorial .. Xav ;) +rep when it lets me to .. :D
#7
Guest_Jordan_*
Posted 21 November 2008 - 04:31 AM
Guest_Jordan_*
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!
Anyway, I awarded you your 20 points before I closed the contest. Congrats!
#9
Posted 22 November 2009 - 08:54 AM
Luv the tutorial
#10
Posted 29 November 2009 - 01:03 PM
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,
#11
Posted 03 January 2010 - 06:17 PM
Cool tutorial, thanks for the info.
#12
Posted 22 January 2010 - 01:16 AM
really good i never used this technique before
let me try this then
let me try this then
1 user(s) are reading this topic
0 members, 1 guests, 0 anonymous users


Sign In
Create Account


Back to top










