I didn’t know much about WinForm form display and value transfer between forms before.
I have recently done some WinForm development, and the relevant knowledge used is organized as follows
A. Form display in WinForm
The display form can have the following 2 Methods:
Form.ShowDialog method (the form is displayed as a modal form)
Form.Show method (the form is displayed as a modeless form)
The specific differences between the 2 are as follows:
1. After calling the Form.Show method , the code behind the Show method will be executed immediately
2. After calling the Form.ShowDialog method, the code behind this method will not be executed until the dialog box is closed
3. When the form is displayed as a modal form, click "Close" " button will hide the form and set the DialogResult property to DialogResult.Cancel
Unlike modeless forms, when the user clicks the close form button of the dialog box or sets the value of the DialogResult property, the Close method of the form is not called.
In fact, the form is hidden by assigning the Visible property of the form to false
In this way, the hidden form can be redisplayed without creating a new instance of the dialog box
Because the form is not closed, it is not in the application When you need the form again, please call the Dispose method of the form
How to determine whether a form is a modal form?
Use the Form.Modal property. If the form is displayed in modal mode, it is true, otherwise it is false.
According to the Modal property of the form displayed through Show and ShowDialog, it corresponds to false and true respectively.
Special note:
Because in the window It is impossible to know the display mode before the body is created, so in the form constructor, the Modal attribute always corresponds to false, so we can only use the Modal attribute value in the Load event or afterwards
How to determine the owner of the form Relationship?
Owner property of the Form class: the owner of the form
When a form is owned by another form, it will be minimized and closed along with the owner form.
For example, if Form2 is owned by form Form1, when Form1 is closed or minimized, Form2 will also be closed or minimized.
For example, in form Form1
Form2 f2 = new Form2 ( );
f2.ShowDialog ( this );
//or
f2.Show ( this );
//or
f2.Owner = this;
f2 .ShowDialog( );
In this way, the owner of f2 is Form1
B.WinForm form passing value
Understanding the knowledge related to the display of the form, and then summarizing the value passing method of the form:
1. Through the constructor
Features: Value transfer is one-way (cannot transfer values to each other), simple to implement
The implementation code is as follows:
In the form Form2
int value1;
string value2;
public Form2 (int value1, string value2)
{
InitializeComponent ( );
this.value1 = value1;
this.value2 = value2;
}
Call this in form Form1
new Form2 ( 111 , "222" ).Show ( ); //This way The two values 111, "222", are transferred to Form2
2. Through static variables
Features: Value transfer is bidirectional, simple to implement
The implementation code is as follows:
Define a static member value in an app class
public class app
{
public static string value;
}
Call like this in form Form1
app.value = "f2"; //Assign values to static members
new Form2 ( ).Show ( ); // Display Form2
in form Form2
this.Text = app.value; //Get the value of app.value
app.value = "Form2"; //Assign a value to app.value so that it can be called by other forms
Define a public attribute Form2Value in the window Form2, obtain and set textbox1 text value
Public String form2value
get
{{{
get
{
Return this. .Form2Value = "Ok"; //Assign the value Ok to textBox1 of Form2
f2.ShowDialog ( );
4. Through the public property value and Owner property of the form (recommended)
Features: Simple and flexible implementation
The implementation code is as follows:
In form Form1
public int Form1Value = 1;
Form2 f2 = new Form2 ( );
f2.ShowDialog ( this ); // Pass Form1 as the owner of Form2 to Form2
In form Form2
Form1 f1 = (Form1) this.Owner;
//The value obtained from Form1 is 1
MessageBox.Show ( f1.Form1Value .ToString ( ) );
//The Form1Value given to Form1 Assign value 222
f1.Form1Value = 222;
5. Through the public property value of the form and the Application.OpenForms property
Description: Application.OpenForms property: Get the collection of open forms belonging to the application. (This property is in .NET Framework version 2.0)
In form Form1
public int Form1Value = 1;
Form2 f2 = new Form2 ( );
f2.Show ( );
In form Form2
string formName = "Form1";
Form fr = Application.OpenForms [ formName ];
if ( fr != null )
{
Form1 f1 = ( Form1 ) fr;
//The value obtained from Form1 is 1
MessageBox.Show ( f1.Form1Value.ToString ( ) );
//Assign the Form1Value of Form1 to a value of 222
f1.Form1Value = 222;
}
6. The code implemented through events
is as follows:
Define the public property Form2Value in the form Form2, get and set the text value of textBox1
and also define an accept event
public string Form2Value
{
get
{
Return this.textBox1. — (
{
if ( accept != null )
{
Accept ( this , EventArgs.Empty ); //When the form triggers an event, pass its own reference
}
}
In the form Form1
Form2 f2 = new Form2 ( );
f2 .accept += new EventHandler ( f2_accept );
f2.Show ( );
void f2_accept ( object sender , EventArgs e )
{
//The receiver of the event gets a reference to Form2 through a simple type conversion
//Received textBox1.Text from Form2
this.textBox1.Text = f2.Form2Value;
}