一、多窗体
1、哪个是主窗体
主窗体就是如果关掉这个窗体,程序就会退出的那个窗体1
问题:主窗体隐藏了,关闭其它窗体后,没有将主窗体显示/关闭,那么程序就关不上了
办法:构造函数传值,将窗体传到另一个窗体中去,在FormClosing事件中关闭form1。
2、要求窗体只能打开一个。
创建一个全局的泛型集合,为了放置全部打开的窗体
1、在窗体打开之前,判断集合中是否有name一致的窗体,如果有就说明已经打开了,就不要再打开了
问题:当窗体打开了,关闭后,就无法再次打开了
办法:当窗体关闭时,清除Form1中集合中的此窗体对象记录 问题:当窗体已经打开,再次点击打开按钮,不会将已打开的窗体重新显示并焦点进入 办法: 找到已打开对象,将WindowState属性设置为: 找到已打开窗体的对象,使用Focus方法;using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApplication16{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } List
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace WindowsFormsApplication16{ public partial class Form2 : Form { Form F1 = null;//创建全局变量F1 public Form2(Form1 f1)//把form1传到form2中,对form1进行操作 { InitializeComponent(); F1 = f1;//此时F1就是代表着form1。 } private void Form2_Load(object sender, EventArgs e) { } private void Form2_FormClosing(object sender, FormClosingEventArgs e) { //F1.Close(); } }}
3、窗体之间的传值和控制
传值:构造函数传值(在form2里面传入Form1和其所传内容,如在form2后台 public Form2(Form1 f1,string a);,在form1后台Form2 f2 = new Form2(this,textBox1.Text);)
控制:第一步,找到窗体对象,第二步,将窗体对象的控件值更改
注意:要将窗体中的对象访问权限修改,将private 改成public 4、提示框类型的窗体ShowDialog();
作用:只有操作完当前窗口,才能操作其他窗口。
二、菜单和工具栏:
1、MenuStrip:顶部菜单
分割线:
1、在每一行的下面单独输入“-”(减号)
2、右键选择《插入》-《separator》
3、插入标准项:选中MenuStrip。右键选择“插入标准项”。
快捷键:每一个项右键属性的最下面的ShortCutKeys可以设置快捷键
不管选项Visible=True或者False,快捷键都管用2、ContextMenuStrip:
右键菜单,里面输入的选项都可以当做事件。在form的ContextMenuStrip属性里面选中自己所建立的ContextMenuStrip,就可以了!3、StatusStript:
底部菜单有Lable,进度条,菜单。
4、ToolStrip
工具条5、ToolStripContainer
工具条容器完!!