最近做一个小程序,用于让用户选择多个记事本文件,然后进这些文件逐个读取存入一个新的文件中,所以用到了OpenFileDialog打开对话框组件
先贴代码
OpenFileDialog open;
private void MergeForm_Load(object sender, EventArgs e)
{
txt_guid.Text = Guid.NewGuid().ToString();
if (open == null)
{
open = new OpenFileDialog();
open.Filter = "文本文件(*.txt)|*.txt";
open.Multiselect = true;
open.RestoreDirectory = true;
}
}
/**点击按钮,弹出选择的对话框**/
private void but_open_Click(object sender, EventArgs e)
{
but_andfile.Enabled = false;
txt_morefile.Text = "";
open.ShowDialog();
if (this.open.ShowDialog() == DialogResult.OK)
{
if (open.FileNames.ToString().Trim().Equals(""))
{
return;
}
if (open.FileNames.Length == 0)
{
return;
}
txt_morefile.Text = Path.GetDirectoryName(open.FileNames[0]);
if (txt_morefile.Text.Trim().Equals(""))
{
return;
}
but_andfile.Enabled = true;
txt_guid.Text = Guid.NewGuid().ToString();
}
}
目的:必须让用户选择一个或多个文件后,才能执行后期的操作,于是加了一些判断,以及使用this.open.ShowDialog() == DialogResult.OK,以确认用户进行了选择
但是有一个问题,不知道是不是BUG,首先你先浏览选择一个文件,然后点“确认”按钮进行确认,但是对话框没有立刻的释放关闭,又一次让我选择文件,再一次后才能关闭选择对话框。
最后解决的办法是使用 OpenFileDialog的事件进行判断
private void MergeForm_Load(object sender, EventArgs e)
{
txt_guid.Text = Guid.NewGuid().ToString();
if (open == null)
{
open = new OpenFileDialog();
open.Filter = "文本文件(*.txt)|*.txt";
open.Multiselect = true;
open.RestoreDirectory = true;
open.FileOk += new CancelEventHandler(open_FileOk); /**New出一个事件**/
}
}
/**用户打开选择对话框**/
private void but_open_Click(object sender, EventArgs e)
{
but_andfile.Enabled = false;
txt_morefile.Text = "";
open.ShowDialog();
}
/**在这里进行判断用户的选择是否合法,如果用户选择了对话框的“取消”按钮是不会触发该事件的**/
void open_FileOk(object sender, CancelEventArgs e)
{
if (open.FileNames.ToString().Trim().Equals(""))
{
return;
}
if (open.FileNames.Length == 0)
{
return;
}
txt_morefile.Text = Path.GetDirectoryName(open.FileNames[0]);
if (txt_morefile.Text.Trim().Equals(""))
{
return;
}
but_andfile.Enabled = true;
txt_guid.Text = Guid.NewGuid().ToString();
}