文章目录
0. 简介
WinForm 是 Windows Form 的简称,是基于 .NET Framework 平台的客户端(PC软件)开发技术,一般使用 C# 编程。C# WinForm 编程需要创建「Windows窗体应用程序」项目。
.NET 提供了大量 Windows 风格的控件和事件,我们可以直接拿来使用,上手简单,开发快速。
1. Hello, world!
1.1 新建项目
打开Visual Studio 2019,新建项目。然后选择“Windows窗体应用”。

1.2 控件工具箱
选择“视图->工具箱”,打开控件工具箱。

如果工具箱中的控件不能满足开发项目的需求,也可以向工具箱中添加新的控件, 或者对工具箱中的控件重置或进行分组等操作。右击工具箱,在弹出的右键菜单中选择“选择项”,弹出以下窗口。

1.3 高分屏设置
随意拖动几个按钮,然后选择“调试->开始执行(不调试)”。可以看到,程序的实际运行效果和设计界面的不太一样。

这是由于C#默认情况下没有禁用高分屏自动缩放,只要禁用了即可,方法如下:
在项目上点击右键,选择“添加->类”。然后选择“应用程序清单文件”。

找到大约47行的位置,去除注释即可。

再一次运行程序,效果很棒!

1.4 窗体属性
在 Windows 窗体应用程序中右击窗体,在弹出的右键菜单中选择“属性”命令,弹出如下图所示的属性面板。

窗体的常用属性如下表所示:

1.5 新建窗体
下面创建一个新的窗体。


1.6 设置启动窗体
每一个 Windows 窗体应用程序在运行时仅能指定一个启动窗体,设置启动窗体的方式是在项目的 Program.cs 文件中指定。

1.7 窗体事件
在 Windows 窗体应用程序中系统已经自定义了一些事件,在窗体属性面板中单击闪电图标即可查看到窗体中的事件,如下图所示。

窗体中常用的事件如下表所示:

如果需要编写事件的代码,可以双击相应事件的左侧,系统会自动生成代码。

在窗体对应的cs文件中编写事件,代码如下:
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 WindowsFormsApp2 {
public partial class Form2 : Form {
public Form2() {
InitializeComponent();
}
private void Form2_Load(object sender, EventArgs e) {
this.BackColor = Color.Red;
}
private void Form2_Click(object sender, EventArgs e) {
this.BackColor = Color.Green;
}
private void Form2_DoubleClick(object sender, EventArgs e) {
this.BackColor = Color.Blue;
}
}
}
运行程序。可以发现,在窗口加载完毕时、鼠标单击时、鼠标双击时,会呈现不同的颜色。

1.8 窗体方法
自定义的窗体都继承自 System.Windows.Form 类,能使用 Form 类中已有的成员,包括属性、方法、事件等。
窗体中也有一些从 System.Windows.Form 类继承的方法,如下表所示。

以下示例演示了打开窗体、居中窗体、关闭窗体。
设置Form1为启动窗体。
设置Form1的鼠标单击事件:
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 WindowsFormsApp2 {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void Form1_MouseClick(object sender, MouseEventArgs e) {
// 新建窗口对象
Form2 form2 = new Form2();
// 显示窗口
form2.Show();
}
}
}
设置Form2的鼠标单击事件和鼠标双击事件:
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 WindowsFormsApp2 {
public partial class Form2 : Form {
public Form2() {
InitializeComponent();
}
private void Form2_MouseClick(object sender, MouseEventArgs e) {
// 将窗体居中
this.CenterToScreen();
}
private void Form2_MouseDoubleClick(object sender, MouseEventArgs e) {
// 关闭窗体
this.Close();
}
}
}
运行程序。此时程序打开窗体Form1,点击鼠标左键,打开窗体Form2,在Form2中单击,窗体居中,再双击,Form2关闭。
2. MessageBox - 消息框
通过调用 MessageBox 类的 Show() 方法,可以弹出消息框。Show() 方法的重载形式如下:

下面对参数进行介绍。
MessageBoxButtons 枚举类型主要用于设置消息框中显示的按钮,具体的枚举值如下。
- OK:在消息框中显示“确定”按钮。
- OKCancel:在消息框中显示“确定”和“取消”按钮。
- AbortRetryIgnore:在消息框中显示“中止” “重试”和“忽略”按钮。
- YesNoCancel:在消息框中显示“是” “否”和“取消”按钮。
- YesNo:在消息框中显示“是”和“否”按钮。
- RetryCancel:在消息框中显示“重试”和“取消”按钮。
MessageBoxIcon 枚举类型主要用于设置消息框中显示的图标,具体的枚举值如下。
- None:在消息框中不显示任何图标。
- Hand、Stop、Error:在消息框中显示由一个红色背景的圆圈及其中的白色X组成 的图标。
- Question:在消息框中显示由圆圈和其中的一个问号组成的图标。
- Exclamation、Warning:在消息框中显示由一个黄色背景的三角形及其中的一个感叹号组成的图标。
- Asterisk、Information:在消息框中显示由一个圆圈及其中的小写字母 i 组成的图标。
调用 MessageBox 类中的 Show 方法将返回一个 DialogResult 类型的值。
DialogResult 也是一个枚举类型,是消息框的返回值,通过单击消息框中不同的按钮得到不同的消息框返回值。
DialogResult 枚举类型的具体值如下。
- None:消息框没有返回值,表明有消息框继续运行。
- OK:消息框的返回值是 OK (通常从标签为“确定”的按钮发送)。
- Cancel:消息框的返回值是 Cancel (通常从标签为“取消”的按钮发送)。
- Abort:消息框的返回值是 Abort (通常从标签为“中止”的按钮发送)。
- Retry:消息框的返回值是 Retry (通常从标签为“重试”的按钮发送)。
- Ignore:消息框的返回值是 Ignore (通常从标签为“忽略“的按钮发送)。
- Yes:消息框的返回值是 Yes (通常从标签为“是“的按钮发送)。
- No:消息框的返回值是 No (通常从标签为“否“的按钮发送)。
以下是一个示例,演示了消息框的常见用法。
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace WindowsFormsApp2 {
public partial class MainForm : Form {
public MainForm() {
InitializeComponent();
}
private void MainForm_Load(object sender, EventArgs e) {
// 朴素消息框
MessageBox.Show("早上好~");
// 有标题的消息框
MessageBox.Show("早上好~", "问好");
// 定制按钮的消息框
DialogResult res = MessageBox.Show("你好马?", "问好", MessageBoxButtons.YesNo);
if (res == DialogResult.Yes) {
// 只有在调试模式下可以看到输出
Debug.WriteLine("用户点击了 是 按钮。");
} else {
Debug.WriteLine("用户点击了 否 按钮。");
}
// 按钮+图标的消息框
MessageBox.Show("你好马?", "问好", MessageBoxButtons.YesNo, MessageBoxIcon.Information);
}
}
}
本文详细介绍C#WinForm编程的基础知识,包括项目创建、控件使用、高分屏设置、窗体属性与事件处理,以及MessageBox消息框的使用技巧。
1398

被折叠的 条评论
为什么被折叠?



