一、多窗体:三种打开窗体的状态:
最最基础的弹窗:
//写在按钮的点击事件内: //实例需要弹出的窗口的类: 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; }