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按钮都需要点击两次才能使表格实际关闭。我该如何解决这个问题?
答案 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;
您需要设置确定按钮