关于OpenFileDialog用户选择取消按钮

最近做一个小程序,用于让用户选择多个记事本文件,然后进这些文件逐个读取存入一个新的文件中,所以用到了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();
        }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值