一、多窗体 1、哪个是主窗体 利用From1的button将From2打开 private void button1_Click(object sender, EventArgs e) { Form2 f2 = new Form2(); f2.Show(); this.Hide();//打开From2时,隐藏From1 }
(1)、构造函数传值,将窗体传到另一个窗体中去 首先打开From2代码,并选择事件FormClosing Form1 F1 = null; public Form2(Form1 f1) { InitializeComponent(); F1 = f1; } private void Form2_FormClosing(object sender, FormClosingEventArgs e) { F1.Close(); } 然后将From1中的 Form2 f2 = new Form2();改为Form2 f2 = new Form2(this); 2、窗体只能打开一个 在From1中创建一个全局的泛型集合,为了放置全部打开的窗体 List<Form> flist = new List<Form>(); 将From1中button1的点击事件改为 bool has=false;//From2是否已被打开一次 Form2 f2 = new Form2(this); foreach(Form F in flist) { if(F.Name==f2.Name) { has = true; } } if (has) { } else { flist.Add(f2); f2.Show(); } 问题:当窗体打开了,关闭后,就无法再次打开了 public void deleteFrom(Form F) { flist.Remove(F); } 然后在From2的FormClosing事件中改为 if(F1!=null) { F1.deleteFrom(this); } 问题:当窗体已经打开,再次点击打开按钮,不会将已打开的窗体重新显示并焦点进入 在From1中button1的点击事件中if(has){}中添加“ f2.Close();”,它起到释放内存的作用 if(F.Name==f2.Name){has = true;}true;后添加F.WindowState = FormWindowState.Normal;//最小化或最大化时点击按钮恢复正常大小 3、窗体之间的传值和控制 传值:构造函数传值 将From2的构造函数改为 public Form2(Form1 f1,string uname) label1.Text = "欢迎回来," + uname; 在From1中改为 Form2 f2 = new Form2(this,textBox1.Text); 控制:第一步,找到窗体对象,第二步,将窗体对象的控件值更改 在From2中添加新建一个按钮和文本框,点击此按钮的点击事件,添加if(F1!=null){F1.button1.Text=Textbox1.Text} ShowDialog(); 修改地方: Form2 f2 = new Form2(this,textBox1.Text); f2.ShowDialog(); 作用: 将窗体显示为模式对话框。 在调用Form.ShowDialog方法后,直到关闭对话框后,才执行此方法后面的代码 二、菜单和工具栏 1、MenuStrip: 快捷键:每一个项右键属性最下面ShortcuKeys可以设置快捷键,ShowShortcuKeys是否在该项上显示快捷键 2、ContextMenuStrip: 在属性 行为上ContextMeunStrip选择您要关联右键菜单,即可使用右键菜单,每一个控件都可以关联右键菜单 3、StatusStript: 4、ToolStrip 5、ToolStripContainer |
|