文章目录
- 信息框
- 文件对话框
- 功能对话框
对话框是开发中经常用到的控件,甚至在上古的MFC编程中,默认就是把一个对话框编辑成窗口。winForm
提供了多种不同的对话框,包括信息框、文件对话框、功能对话框等,下面逐个演示这些消息框。
但在此之前,需要稍微做一点准备工作,新建一个winForm
工程,拖动一个TextBox
用于信息回传,命名为tbInfo
。如果不熟悉winform
,可参考这篇
- 💎Winform,最友好的桌面GUI框架|源码
本文源码地址:源码
信息框
拖动一个按钮,文本内容为弹出信息框
,名字改为btnMsgBox
,双击创建点击函数
private void btnMsgBox_Click(object sender, EventArgs e)
{
var res = MessageBox.Show("我是信息框");
tbInfo.AppendText(res.ToString());
}
上面是最简单的信息框测试函数,通过调用MessageBox
中的静态方法Show
,实现了点击按钮弹出信息框的功能,效果如下
MessageBox.Show
提供了多种重载方案,但所有重载方案都将返回一个DialogResult
的枚举类型,其定义如下
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 |
---|---|---|---|---|---|---|---|---|---|
None | OK | Cancel | Abort | Retry | Ignore | Yes | No | TryAgain | Continue |
这些枚举类型,将在相应的功能信息框中得到体现,例如下面的代码
private void btnMsgBox_Click(object sender, EventArgs e)
{
var res = MessageBox.Show("选择哪一个?", "是否取消", MessageBoxButtons.YesNoCancel);
tbInfo.AppendText(res.ToString());
}
效果如下
文件对话框
WinForm
提供了多种文件对话框,包括
OpenFileDialog
文件选择对话框SaveFileDialog
文件保存对话框FolderBrowserDialog
文件夹选择对话框
这三个对话框均通过ShowDialog
函数来进行弹出交互,其返回值与MessageBox.Show
一样,都是枚举类型DialogResult
。
但很显然,我们使用文件对话框,要的并不是一个OK
或者取消标志,而是选择的文件或者文件夹名字。在OpenFileDialog
和SaveFileDialog
中,提供了FileName
属性,用于保存选择或者新建的文件名;文件夹对话框则提供了SelectedPath
属性,表示选择的文件夹。
由于三者大同小异,故下面先演示一下文件夹选择对话框,在文件夹对话框中,通过设置InitialDirectory
可以设置默认打开的文件夹
示例如下
private void btnSlctFolder_Click(object sender, EventArgs e)
{
var fbd = new FolderBrowserDialog();
fbd.InitialDirectory = Directory.GetCurrentDirectory();
var res = fbd.ShowDialog();
tbInfo.AppendText($"{res}\r\n");
tbInfo.AppendText(fbd.SelectedPath);
}
效果如下
在使用文件对话框时,会经常遇到选择特定格式的问题,这时通过设置Filter
参数,可以实现只显示特定的文件格式,代码为
private void btnOpenFile_Click(object sender, EventArgs e)
{
var ofd = new OpenFileDialog();
ofd.Filter = "C#文件(*.cs)|*.cs";
var res = ofd.ShowDialog();
tbInfo.AppendText($"{res}\r\n");
tbInfo.AppendText(ofd.FileName);
}
效果如下
功能对话框
在WinForm
中,可以非常便捷地设置颜色、字体以及打印机,并分别用下面三个对话框表示。
对话框 | 简介 | 重要属性 |
---|---|---|
ColorDialog | 颜色对话框 | Color |
FontDialog | 字体对话框 | Font |
PrintDialog | 打印设置 | PrinterSettings |
这些对话框的逻辑大同小异,区别无非是在选额特定内容后,存储这些内容的属性,即上表中的重要属性。
使用效果如下