C# Form 点击红色 X 必须点击两次才能关闭

C# Form Clicking the red X has to be clicked twice to close

public static class Prompt
    {
        public static string ShowDialog(string text, string caption)
        {
            Form prompt = new Form();
            prompt.Width = 435;
            prompt.Height = 122;
            prompt.FormBorderStyle = FormBorderStyle.FixedDialog;
            prompt.Text = caption;
            prompt.StartPosition = FormStartPosition.CenterScreen;
            Label textLabel = new Label() { Left = 10, Top=10, Width=400, Text=text };
            TextBox textBox = new TextBox() { Left = 10, Top=30, Width=400 };
            Button confirmation = new Button() { Text = "Ok", Left=300, Width=100, Top=52 };
            confirmation.Click += (sender, e) => { prompt.Close(); };
            prompt.Controls.Add(textBox);
            prompt.Controls.Add(confirmation);
            prompt.Controls.Add(textLabel);
            prompt.AcceptButton = confirmation;
            prompt.ShowDialog();
            return prompt.ShowDialog() == DialogResult.OK ? textBox.Text : null;
        }
    }

我创建了这个 class,这样如果用户单击确定按钮它 returns 文本框的值,但如果他们单击关闭它 returns 空。它有效,唯一的问题是红色的 x 和 ok 按钮都需要单击两次才能真正关闭表单。我该如何解决这个问题?

您的 prompt.ShowDialog() 是在第一次单击红色 X 时执行的代码。由于没有代码来处理它,因此什么也不会发生。下次您单击红色 X 时,它会退出 Prompt.ShowDialog() 方法。

基本上 showDialog 方法在这一行之后立即处于等待状态: prompt.ShowDialog();

在提供输入之前,它位于此处的 return 语句之前: return prompt.ShowDialog() == DialogResult.Cancel ?空:textBox.Text;

这并不能解决您的问题,但它确实足够清楚,您应该能够解决它。

confirmation.DialogResult = DialogResult.OK;

您需要设置确定按钮