我有一个对话框,当单击确定按钮时我想阻止关闭,但返回并且即使AcceptButton属性设置为none而不是我的OK按钮。阻止它关闭的最好方法是什么?单击确定按钮时阻止ShowDialog()返回
回答
事实上,你正在改变错误的属性。你肯定希望AcceptButton
是确定按钮。此属性决定哪个是Windows条款中的默认按钮。这是当您按键盘上的ENTER时按下的按钮。通过更改AcceptButton
,您只需将键盘界面切换到对话框。您不会以任何方式影响按钮被按下时发生的情况。
你需要做的是将你的按钮的DialogResult
属性设置为DialogResult.None
,因为这决定了按钮按下是否关闭窗体。然后,在按钮的点击处理程序中,您需要决定如何响应按钮按下。我预计,如果对话框的验证成功,您应该通过设置窗体的DialogResult
属性来关闭对话框。例如,
private void OKbuttonClick(object sender, EventArgs e)
{
if (this.CanClose())
this.DialogResult = DialogResult.OK;
}
您还需要删除按钮本身的DialogResult
,并在按钮的属性窗口中将其设置为None
。
http://msdn.microsoft.com/en-us/library/system.windows.forms.button.dialogresult.aspx
如果此属性的DialogResult设置为比 无其他任何东西,如果是通过ShowDialog的 方法显示父窗体,单击按钮关闭父窗体,而你不必 挂钩任何事件。
显然,现在您的按钮不会执行任何操作,因此您需要为Click
事件注册处理程序。
停止此行为的最佳方法是在设计时在属性窗口中将OK按钮的DialogResult属性更改为DialogResult.None
。
另外,如果您已经在OK按钮的单击事件中有一些代码,则可以更改DialogResult窗体。
private void comOK_Click(object sender, EventArgs e)
{
// your code .....
// Usually this kind of processing is the consequence of some validation check that failed
// so probably you want something like this
if(MyValidationCheck() == false)
{
// show a message to the user and then stop the form closing with
this.DialogResult = DialogResult.None;
}
}
最佳做法是将Ok按钮设置为禁用而不是对用户输入做出响应。
根据窗体的不同,DialogResult属性应该设置为Ok或Yes,AcceptButton也应链接到Ok。
我通常在所有对话框上创建一个函数,并在用户与数据交互时调用它。
void RefreshControls() { button.Enabled = this.ValidateInput(); }
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Form2 fLogin = new Form2();
if (fLogin.ShowDialog() == DialogResult.OK)
{
Application.Run(new Form1());
}
else
{
Application.Exit();
}
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
private void btnKlik_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
}
- 1. 如何阻止返回按钮?
- 2. PHP:按下“返回”按钮时阻止表单被意外重新处理
- 3. Bootstrap Modal - 如果单击是按钮时返回True - 定制确认
- 4. 返回按钮时返回按钮
- 5. 如何阻止asp.net按钮被双击?
- 6. wxpython按钮被阻止/未点击
- 7. Javascript阻止ASP.NET按钮点击
- 8. 单击按钮时如何停止autoslide?
- 9. 单击Html.ActionLink时,返回Html.BeginForm中所选单选按钮的值?
- 10. 单选按钮确认,同时单击“继续”按钮的Javascript
- 11. 按BACK按钮时阻止缓存
- 12. 定时器不停止按钮点击
- 13. 当表单提交后点击'返回'按钮时,防止浏览器激活
- 14. 当我点击返回按钮下拉菜单不会返回
- 15. 单击浏览器返回按钮时无法获得正确的输入值?
- 16. 空文本框 - 返回错误或阻止按钮的方式
- 17. 如何阻止硬件返回按钮并重新登录
- 18. Backbone.history.start()阻止返回按钮离开页面
- 19. File.ReadAllText阻止窗体关闭x按钮单击
- 20. ASP.NET:ModalPopupExtender阻止按钮单击事件从发射
- 21. 提交表单上的阻止按钮
- 22. 阻止提交表单的Asp.NET按钮
- 23. 单击后退按钮时返回 - 初学者
- 24. Android EditText:单击返回按钮时关闭键盘
- 25. 如何仅在单击按钮时才返回变量的值?
- 26. 防止在单击div内的按钮时单击父母
- 27. 停止GPS返回按钮按
- 28. 如何在点击按钮时阻止重复动作?
- 29. Java异常阻止关闭程序(点击X按钮时)
- 30. 安卓 - 阻止锁定硬件按钮