所以我试图在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所在的位置)。
有谁知道如何干净地实施一个向父表单发送反馈的对话框? 随意问你是否像我一样困惑:)
答案 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。