Winform代码中,一个窗口其实就是对应一个Form对象,这和Swing中的JForm差不多。创建一个Winform工程后,VisualStudio已经帮我们创建了一个默认的Form1.cs
。我们也可以继续创建新的窗口,以模态或非模态形式实例化并显示。
我们在VisualStudio中拖控件,这些布局内容放置在XXForm.Designer.cs
中,而我们针对按钮点击等处理逻辑,放在XXForm.cs
中,虽然分写在两个文件中,但实际上它们是一个类,后者是前者的partial class
,分开写是为了不让设计器自动生成的代码和我们手写的代码混杂在一起,互相干扰。
Form有几个比较重要的生命周期需要我们了解:
事件 | 说明 |
---|---|
Load | 窗体加载时触发,可以用于加载初始化数据 |
Shown | 窗体显示时触发 |
Activated | 窗体获取焦点时触发 |
Deactivate | 窗体失去焦点时触发 |
FormClosing | 窗体关闭中触发 |
FormClosed | 窗体完成关闭触发 |
代码中,我们可以编写对应事件的委托函数,在对应生命周期执行特定逻辑。
正常开发中,我们的程序很有可能拥有不止一个窗口,比如一个业务系统,可能会以弹出窗口的形式让用户填写一个表单,这在传统软件中很常见。在工程上点击右键,选择添加->Windows窗体
即可。
显示新窗口时分为模态和非模态,从经验上来说,一个应用程序的非主窗口通常性质类似于对话框,因此都是模态的,真正的多主操作窗口应考虑使用虚拟窗口,例如Winform中的MDI,或是Java中的JDesktopPane。
显示一个模态窗口:
private void button1_Click(object sender, EventArgs e)
{
Form2 fm2 = new Form2();
fm2.ShowDialog(this);
}
显示一个非模态窗口:
private void button1_Click(object sender, EventArgs e)
{
Form2 fm2 = new Form2();
fm2.Show(this);
}
实际上,一些常用的模态窗体如文件选择框、颜色选择框等,Winform都已经内置的,关于内置对话框将在后续章节介绍。