C#表单单击红色X必须单击两次才能关闭

时间:2015-02-02 15:38:36

标签: c# winforms forms

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;
        }
    }

我创建了这个类,因此如果用户单击ok按钮,它将返回文本框的值,但如果他们单击close,则返回null。它的工作原理,唯一的问题是红色的x和ok按钮都需要点击两次才能使表格实际关闭。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

您的prompt.ShowDialog()是在第一个单击Red X的实例上执行的代码。由于没有代码可以处理它,因此不会发生任何事情。下次您点击Red X时,它会退出Prompt.ShowDialog()方法。

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

在提供输入之前,它位于返回声明之前: return prompt.ShowDialog()== DialogResult.Cancel? null:textBox.Text;

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

答案 1 :(得分:0)

confirmation.DialogResult = DialogResult.OK;

您需要设置确定按钮