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()。如果你需要检查函数的返回值,你很难理解为什么你需要一个表单。直接使用对话框即可。