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

C# C窗体单击红色X必须单击两次才能关闭,c#,winforms,forms,C#,Winforms,Forms,我创建了这个类,因此如果用户单击ok按钮,它将返回文本框的值,但是如果用户单击close,它将返回null。它可以工作,唯一的问题是,红色的x和ok按钮都需要单击两次才能真正关闭表单。如何修复此问题?您的prompt.ShowDialog是在单击红色X的第一个实例上执行的代码。由于没有代码来处理它,因此不会发生任何事情。下次单击红色X时,它将从Prompt.ShowDialog方法中退出 基本上,showDialog方法在这一行之后立即处于等待状态: prompt.ShowDialog 在提供输

我创建了这个类,因此如果用户单击ok按钮,它将返回文本框的值,但是如果用户单击close,它将返回null。它可以工作,唯一的问题是,红色的x和ok按钮都需要单击两次才能真正关闭表单。如何修复此问题?

您的prompt.ShowDialog是在单击红色X的第一个实例上执行的代码。由于没有代码来处理它,因此不会发生任何事情。下次单击红色X时,它将从Prompt.ShowDialog方法中退出

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

在提供输入之前,它位于返回语句之前: return prompt.ShowDialog==DialogResult。是否取消?null:textBox.Text

这并不能解决你的问题,但它确实很好地阐明了这一点,你应该能够解决它

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

您需要设置“确定”按钮

可能重复请澄清您的具体问题或添加其他详细信息以突出显示您需要的内容。很难说清楚你在问什么。请参阅页面以获取澄清此问题的帮助。这不是一个微不足道的问题,它充其量是非常基本的@SKD4也许您应该开始使用名为GOOGLE@AndyKorneyev我编辑使它更具体。你打了两次ShowDailog。这就是为什么必须单击X两次。
confirmation.DialogResult = DialogResult.OK;