如何创建模式对话框并从子表单接收反馈(如文件夹浏览器控件)

时间:2017-08-11 18:11:56

标签: c# forms directory

所以我试图在C#中为我的自定义应用程序创建一个文件夹浏览器,并且文件夹浏览器没问题,但是我想将其设置为默认操作的方式。
据@Kevin说,我正在尝试进行模态对话。

   // I create the folderbrowser control and await the directory 
   string CreateFileDialog(bool allowFixedDrives)
    {
        FolderBrowser fb = new FolderBrowser(this, allowFixedDrives);
        fb.Show();

        //return THE_SELECTED_FOLDER_DIR;
        return "";
    }

因此在folderbrowser中有一个布尔值允许固定驱动器以及对父窗体的引用:

// Create the control and receive whether or not it should read fixed drives and also get a reference to the parent control.
public FolderBrowser(Form1 frm1, bool allowFixed)
    {
        InitializeComponent();
        this.allowFixed = allowFixed;
        frm1.Enabled = false;
    }

创建此对话框时冻结主窗体。 如果用户关闭表单,它将返回null或""如果用户按下okay,它应该返回所选目录(THE_SELECTED_FOLDER_DIR所在的位置)。

有谁知道如何干净地实施一个向父表单发送反馈的对话框? 随意问你是否像我一样困惑:)

1 个答案:

答案 0 :(得分:0)

所以在与@Kevin进行了一次相当有趣的讨论之后,我决定最好的方法是在表单中调用一个公共函数然后显示它。有点难以解释,所以我会告诉你: 注意:我认为这应该保持开放,万一有人遇到同样的问题......

所以我想简单地获取一个选定的文件夹名称,然后我会在文本控件上显示所选的文件夹,例如:

        bool invalid = false;
        string value = CreateFileDialog(true, out invalid);
        if (!invalid)
        {
            txt_File.Text = value;
        }
        else
        {
            MessageBox.Show("A folder was not selected.");
        }

好的,所以我正在创建一个对话框。我检查对话框是否在没有选择文件的情况下关闭,如果无效则显示消息框....

    string CreateFileDialog(bool allowFixedDrives, out bool invalid)
    {
        FolderBrowser fb = new FolderBrowser(this, allowFixedDrives);

        return fb.ShowForm(out invalid);
    }

现在这里有趣的地方。我在这里创建对话框并在窗体上调用一个函数来实际显示它,但我将一个布尔值作为out变量传递,以检测它是否在没有选择文件的情况下被关闭。
最后:

    public string ShowForm(out bool a)
    {
        ShowDialog();
        frm1.Enabled = true;

        if (!Directory.Exists(selectedFolder))
        {
            a = true;
            return selectedFolder;
        }
        else
        {
            a = false;
            return selectedFolder;
        }
    }

如果用户按下OK,我将返回所选的文件夹名称,否则不返回它,并将out参数设置为false。
你有它。
我要感谢所有参与其中的人,即@Kevin。