文件/文件夹浏览器对话框出现两次

时间:2014-08-09 21:48:34

标签: c# dialog visual-studio-2013

我正在使用C#使用Visual Studio 2013 Express启动应用程序(在便携模式下),并使用subst命令或C#创建虚拟驱动器当量)
目前它适用于流行的媒体中心XBMC,但它最终也可以用于其他程序

在第一个屏幕上,用户可以选择XBMC.exe文件的路径和包含媒体集的目录 Select exe and media folder screen

但是,在测试时,两个对话框都会出现两次:一次点击“浏览”按钮后,再次单击“确定”或“取消”按钮(在对话框中)。因此,在将所选路径/文件插入文本框之前,每次都必须单击“确定”两次 我不知道为什么会发生这种情况,而且在我自己编程方面我有点像菜鸟......

XBMCPortableLauncher.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace XBMCAttempt1
{
    public partial class XBMCPortableLauncher : Form
    {
        public XBMCPortableLauncher()
        {
            InitializeComponent();
        }

        private void btnSelectMediaFolder_Click(object sender, EventArgs e)
        {
            // Opens "Browse for media folder" dialog
            fBDBrowseMediaFolder.ShowDialog();
            if (fBDBrowseMediaFolder.ShowDialog() == DialogResult.OK)
            {
                // Deletes any existing text in the textbox
                tbMediaFolder.Clear();
                // Inserts the selected path into the text box if user selects "OK"
                tbMediaFolder.Text = fBDBrowseMediaFolder.SelectedPath;
            }
        }

        private void btnSelectXBMCexe_Click(object sender, EventArgs e)
        {
            // Opens the "Select XBMC.exe" dialog
            oFDBrowseXBMCexe.ShowDialog();
            if (oFDBrowseXBMCexe.ShowDialog() == DialogResult.OK)
            {
                // Deletes any existing text in the textbox
                tbXBMCexe.Clear();
                // Inserts the selected file into the text box if user selects "OK"
                tbXBMCexe.Text = oFDBrowseXBMCexe.FileName;
            }
        }
    }
}

有谁能告诉我我做错了什么,以及我要做些什么来解决这个问题? (如果您需要更多信息,请询问)

1 个答案:

答案 0 :(得分:1)

但你要两次致电ShowDIalog。不能那么容易:

fBDBrowseMediaFolder.ShowDialog();
if (fBDBrowseMediaFolder.ShowDialog() == DialogResult.OK)

删除第一个电话。

ShowDialog正在屏蔽,实际上它会显示您的对话框并返回DialogResult。因此,只保留实际使用结果的第二个调用。并为两个对话框(fBDBrowseMediaFolderoFDBrowseXBMCexe)执行此操作。