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;
您需要设置确定按钮
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;
您需要设置确定按钮