C# 在用户选择驱动器后,如何关闭窗体?
我有以下代码:C# 在用户选择驱动器后,如何关闭窗体?,c#,C#,我有以下代码: public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { FolderSelect("Please select:"); } public static string FolderSelect(string tx
public partial class Form1 : Form
{
public Form1() { InitializeComponent(); }
private void button1_Click(object sender, EventArgs e)
{
FolderSelect("Please select:");
}
public static string FolderSelect(string txtPrompt)
{
// Now, we want to use the path information to population
// our folder selection initial location
string initialCheckoutPathDir = ("C:\\");
System.IO.DirectoryInfo info =
new System.IO.DirectoryInfo(initialCheckoutPathDir);
FolderBrowserDialog FolderSelect = new FolderBrowserDialog();
FolderSelect.SelectedPath = info.FullName;
FolderSelect.Description = txtPrompt;
FolderSelect.ShowNewFolderButton = true;
if (FolderSelect.ShowDialog() == DialogResult.OK)
{
string retPath = FolderSelect.SelectedPath;
if (retPath == null)
retPath = "";
DriveRecursion(retPath);
}
else
return "";
}
}
所以我有一个带按钮的窗口窗体。用户按下按钮,FolderBrowser对话框出现。一旦用户选择了一个驱动器,我希望表单(带按钮)也关闭
我一点运气都没有。有什么想法吗?语法将不胜感激。您可以打电话。此外,您还可以使用而不仅仅是Show()打开表单,并在关闭表单之前设置:
DialogResult = FolderSelect.ShowDialog();
Close();
编辑:您的FolderSelect方法可能是无效的。最好将FolderSelect对话框的结果保存到属性中。因为FolderSelect是静态的,所以您将无法访问表单变量。所以,你有两个选择 A) 使FolderSelect成为一个实例方法。那么你就可以这么做了。请记住,这不是必须的,我只是把它放在那里为了清楚
B) 从FolderSelect返回一个布尔值,如果为真,在button click事件中,调用this.Close()在FolderSelect之后,放置this.Close() 在
文件夹选择
返回对话框结果后。确定
,您需要调用this。关闭
。所以像这样:
public string FolderSelect(string txtPrompt)
{
//Value to be returned
string result = string.empty;
//Now, we want to use the path information to population our folder selection initial location
string initialCheckoutPathDir = (@"C:\");
System.IO.DirectoryInfo info = new System.IO.DirectoryInfo(initialCheckoutPathDir);
FolderBrowserDialog FolderSelect = new FolderBrowserDialog();
FolderSelect.SelectedPath = info.FullName;
FolderSelect.Description = txtPrompt;
FolderSelect.ShowNewFolderButton = true;
if (FolderSelect.ShowDialog() == DialogResult.OK)
{
string retPath = FolderSelect.SelectedPath;
if (retPath == null)
{
retPath = "";
}
DriveRecursion(retPath);
result = retPath;
//Close this form.
this.Close();
}
return result;
}
编辑:
由于某些原因,
FolderSelect
方法是静态的。您应该删除static,使其具有对表单的引用。如果使用ReSharper,则可能是静态的。如果没有引用包含的类,它将建议将任何方法设置为静态。谢谢!而且,我对这方面还不熟悉。但是FolderSelect出现了一个错误--“并非所有代码路径都返回值”。我假设这是b/c而不是return-retPath,我调用的是另一个函数。我怎样才能消除这个错误呢?我已经对代码做了一个快速而肮脏的更新,所以它总是有一个返回路径。你也应该自己评估一下。嗯……由于某种原因,表单仍然没有关闭。我对它进行了调试,似乎在命中DriveRecursion(retPath)时,result=retPath;还有这个。close();永远不要被应用程序读取。如果你一步一步地阅读,它是否会毫无例外地离开DriveRecursion
方法,进入this.close()
行?你是从正确的形式调用这个方法吗?我认为你的代码甚至不会像这里列出的那样编译。在代码的所有情况下都不会返回值。在if(FolderSelect…)中,您可能打算使用returndriverecursion(retPath)。此外,在按钮单击中,您没有对返回值执行任何操作。不过,您的问题的简单答案是在调用FolderSelect函数后单击按钮时,在按钮中输入this.Close()。如果你需要检查函数的返回值,你很难理解为什么你需要一个表单。直接使用对话框即可。