通用对话框学习一:OpenFileDialog
在进行WinForm程序的开发时,经常会有提示用户输入特定的信息,但是对于常见的任务,例如,打开和保存文件,可以使用预先编写好的对话框类,而不是定制的对话框。
对话框是一个在另一个窗口中显示的窗口,在继续执行程序流之前,可以让用户在对话框中输入一些数据。通用对话框常常用于从用户处获取一般性的信息,大多数应用程序都需要它,例如输入文件名,它是Windows操作系统的一部分。除了PrintPreviewDialog外,其他的对话框都派生子抽象基类CommonDialog。CommonDialog定义了一些方法和事件,他们对于所有的对话框类来说都是通用的。
通用方法:
Reset | 在派生类中被重写时,将通用对话框的属性重置为默认值。 | |
已重载。 运行通用对话框。 |
通用的事件:
HelpRequest | 当用户单击通用对话框中的“帮助”按钮时发生。 |
CommonDialog类是一个抽象类,它有一个抽象的方法,abstract bool RunDialog ,因此它的继承类均需要实现这个方法。这次主要学习OpenFileDialog类的使用。
OpenFileDialog类是一个sealed类,因此只能实例化。MSDN解释“提示用户打开文件。无法继承此类。”使用此类课检查某个文件是否存在并打开该文件。ShowReadOnly属性确定是否在对话框中显示只读复选框,ReadOnlyChecked属性指示是否选中只读复选框。
它有很多的属性,下面通过一个例子来了解一些属性的使用。
新建一个WinForm程序,有两个控件,button控件和一个textbox控件,事先在D盘建一个文本文档Test.txt,在里面任意添加内容。界面如下:
对于button的点击事件,编写如下的代码:
private void button1_Click(object sender, System.EventArgs e)
{
OpenFileDialog openFileDialog1 = new OpenFileDialog();
openFileDialog1.InitialDirectory = "d:\\";
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
openFileDialog1.FilterIndex = 1;
openFileDialog1.RestoreDirectory = true;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Clear();
using(StreamReader read = new StreamReader(openFileDialog1.FileName,Encoding.Default))
{
string line;
while ((line=read.ReadLine())!=null)
{
textBox1.AppendText(line);
}
}
}
}
打开的文件对话框的一些属性时可以进行设置的,比如打开什么路径下的文件,可以对文件夹中的文件进行筛选。
openFileDialog1.Title="选择文件";Title属性设置打开对话框的名字,默认是“打开”,但是i这个名字并不是最好的。
openFileDialog1.InitialDirectory = "c:\\";InitialDirectory属性,设置打开的默认目录,默认情况在C盘。这里是D盘。
openFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*";Filter属性文件过滤器,是对文件进行筛选。这里的话可以看出是对*.txt和*.*进行选择。过滤器前后不允许有空白,如果写成 txt files (*.txt)|*.txt |All files (*.*)|*.*,则会出现异常。
openFileDialog1.FilterIndex = 1;表示默认筛选情况。
openFileDialog1.FileName,FileName属性用来获得打开文件的文件名。获取或设置一个包含在文件对话框中选定的文件名的字符串。
下面重点介绍一下,OFD的showDialog()方法。原型如下:
public DialogResult ShowDialog ()
它显示一个打开文件对话框。返回值是一个枚举类型DialogResult。指定标识符以指示对话框的返回值。对于OFD对话框,如果用户在对话框中单击“确定”,则为DialogResult.OK,否则为DialogResult.Cancel。
前面说到,ShowReadOnly属性确定是否在对话框中显示只读复选框,ReadOnlyChecked属性指示是否选中只读复选框。加一句 openFileDialog1.ShowReadOnly = true;这是什么效果呢,如下:
总结:使用OFD,首先要创建一个OFD的实例,设置一下这个实例的属性,包括默认的打开路径,文件的筛选,然后再调用ShowDialog()方法,在根据用户的选择来处理相关操作。
自己对于OFD的一个另类的理解:一个OFD对话框,终极的目标就是为了获得文件的名字,因为有名字就可以进行访问了!
PS:文件过滤器的文本字符串的构成
每一部分用“|”来个开,而每一个部分又可以分成2块,中间依旧用“|”来隔开。每一部分的2个块中,第一个快表示的是在下拉列表中显示的文本,第二个块表示是对文件进行的筛选。例如:
TxT文件|*.txt 则下拉中出现“TxT文件”,而里面是筛选后的"txt"文件。
DialogResult枚举:
它定义了Abort,Cancel,Ignore,No,None,OK,Retry,Yes等。
None是默认值,只要用户没有关闭这个对话框,就设置这个值。根据单击的情况来返回相应的结果,对于OFD只有OK和Cancel。
FileNames属性之补充:
前面是打开一个文件的当Multiselect属性设置为true时,可以选中多个文件,则FileNames属性返回的是一个string[]。包含了所选中的文件的名字。