Click here to Skip to main content
15,893,161 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
i have 3 forms,
-first form is main, when button is clicked, show second form
-second form ask for password
-if password is valid, then go to third form

Form1
C#
private void btnProfile_Click(object sender, EventArgs e)
{
   Form2 pass = new Form2 ("Form3");
   pass.ShowDialog();
}


Form2
C#
private void btnProfile_Click(object sender, EventArgs e)
{
 if (checkPassword() == true)
 {
   Form form = (Form)Activator.CreateInstance(Type.GetType("Form3"));
   form.ShowDialog();
 }
}


Now, the code above is work as charm. i need to modify so that the Form2 will return the Bool value to Form1.
- if valid password, return true to Form1
- if not a valid password, return false to Form1
Posted
Comments
BillWoodruff 18-Oct-13 7:21am    
I am curious, do you think you have the answer you need, now ?

Hi melberry,

I wouldn't recomend to use a boolean. For this case you have the DialogResult enumeration.

So do something like this:

C#
if(form.ShowDialog() == DialogResult.Ok)
{
   // Go to 3rd form
}
else
{
   // Invalid or Dialog was canceled
}


this approach is best used together with the DialogResult property of a System.Windows.Forms.Button. Or you can set the AcceptButton, CancelButton properties of your form in the designer to wire up your buttons.
Of course you can always set the DialogResult property of your form manually in code.

Does this info help you?

Kind regards Johannes
 
Share this answer
 
Comments
BillWoodruff 18-Oct-13 7:21am    
Answer upvoted.
First of all, this code has amazing abuse. To create a form instance of the type Form3, you need to do Form myForm = new Form3(); nothing else. Using Activator the way you do it totally pointless and totally unsupportable: should you ever change the type name, the compiler won't detect that "Form3" in Type.GetType("Form3") is misspelled. Besides, you should never use auto-generated names like Form3 or btnProfile_Click. All names should be semantically sensitive. How do you think why are you given a refactorizatoin engine with Visual Studio?

Now, child-parent relationships between forms are effectively disabled. None of your forms is a parent of any other forms. If you try to set the Parent property for a form, it will through exception (there is a documented work-around, but I don't know how it can be useful for people show don't want doing any abuse). But you really need to use the property Owner, which is related to Z-order of forms of the same application: it keeps all such forms together in Z-order, which is important for UI integrity. Anyway, it has noting to do with your main problem.

It looks like your problem is related to the popular question about form collaboration. The most robust solution is implementation of an appropriate interface in form class and passing the interface reference instead of reference to a "whole instance" of a Form. Please see my past solution for more detail: How to copy all the items between listboxes in two forms[^].

Please also see other solutions in this discussion. If the application is simple enough, the solution could be as simple as declaring of some internal property in one form and passing a reference to the instance of one form to the instance of another form. For more complex projects, such violation of strictly encapsulated style and loose coupling could add up the the accidental complexity of the code and invite mistakes, so the well-encapsulated solution would be preferable.

Please see also:
http://en.wikipedia.org/wiki/Accidental_complexity[^],
http://en.wikipedia.org/wiki/Loose_coupling[^].

—SA
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900