Form窗口

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都已经内置的,关于内置对话框将在后续章节介绍。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap