C# Winform多窗体&&构造函数传值

一、多窗体:三种打开窗体的状态:

最最基础的弹窗:

//写在按钮的点击事件内:
//实例需要弹出的窗口的类:
Form2 f2  = new Form2();
f2.Show();

1、弹窗窗口:

//实例化需要弹窗的类
Form2 f2 = new Form2();
f2.ShowDialog();
//此弹窗打开子弹窗后父级弹窗不可选中

2、子窗口:

//实例化Form2
Form2 f2 = new Form2();
//this代表这个类
//当前窗口的拥有f2
f2.Owner = this;
f3.Show();
//子弹窗默认置顶父级弹窗,对其他弹窗无影响;
//此弹窗子级弹窗和子级弹窗是平级的,可以互相覆盖;

3、唯一窗口:

//判断窗口有没有开启,没开启,开启一个新的,开启了,不做任何操作
//关闭变为没开启状态
//在Form1声明一个成员变量;
public List<From> FromList = nwe List<Form>();
//按钮的点击事件:
//实例化Form2的时候要把form1传给Form2的构造函数;
Form2 f2 = new Form2(this);
bool a = false;
//遍历FromList
foreach(From x in FromList)
{
//判断,From2是否在FromList内,是返回true;
    if(x is From2)
        {
            a = true;
        }
}
//如果FromList内有From2...
if(a)
{
}
//如果没有....
else
{
//把f2放到集合内,由于Form1,Form2等等,和Form都是继承关系,所以...
    FormList.Add(f2);
    f2.Show();
}

//这里是Form2的类的构造函数:
//仅供提升作用域;
Form F1 = null;
//(From f1)的作用是传值;
public From2(From f1)
{
    F1 = f1;
}
//在Form2的FormClosing事件中双击:
F1.FromList.Remove(this);

//打开:简单的说,就是,先定义一个集合,把Form2放到一个集合内,遍历个集合,如果is到了返回true,不作任何操作,is不到返回false,可以打开From2,在把From2扔到集合内;
//关闭了再打开就是把Form1自己,传给Form2的构造函数,当Form2关闭的时候执行关闭前的事件:把自己从集合内Remove掉;

二、构造函数传值:

简单地说就是通过一个按钮的点击事件,在Form2实例化的过程中把From1的控件的值传给From2的构造函数,再把值赋给相应的控件;

简单的传值:

//Form1的按钮点击事件内:
Form2 f2  = new Form(TextBox.Text);
From2.Show();
//From2的构造函数:引入一个String类型的变量
public Form2(string s)
        {
            InitializeComponent();
//赋值给From2的Label1,显示出来的文字就是Form1的TextBox.Text;
            label1.Text = s;
        }
原文地址:https://www.cnblogs.com/xinchenhui/p/7875751.html