接受按钮无法关闭窗体。

3

我有两个非常相似的表单,但是在其中一个表单中,点击“AcceptButton”会关闭表单,在另一个表单中不会关闭表单。它们都将其“AcceptButton”设置为“btnAccept”。

最近我创建了第二个表单,第一个表单已经存在一段时间,是由别人创建的。

它们都是这样打开的:

using(var form = new SomeDialog(dependency))
{
    form.StartPosition = FormStartPosition.CenterParent;
    form.ShowDialog(this);
}

两者都会处理接受按钮的点击,代码如下所示。

private void btnAccept_Click(object sender, EventArgs e)
{
  _dependency.DoSomething(userInput);
}

我把整个设计文件都贴出来可能并没有帮助。有什么特定的内容需要展示吗?我在StackOverflow上也找不到类似的帖子。

是什么导致了这种不同寻常的行为,我错过了什么?


2
表单需要将其AcceptButton属性设置为btnAccept。 - LarsTech
两种表单都将其AcceptButton属性设置为btnAccept - Jeff B
那么事件已经连接好了吗?当点击时,代码是否运行? - LarsTech
是的,在 btnAccept_Click 中设置的断点按预期被触发。在其中一个中,窗体随后关闭,在另一个中则保持打开状态。 - Jeff B
1
然后,您需要将窗体的DialogResult设置为OK。 - LarsTech
1个回答

7
AcceptButton属性只是选择在按Enter键时将执行默认操作的按钮。在UI中,该按钮周围有明显的边框。但这还不够,您仍然需要实现默认操作。
一种简单的方法是在设计器中设置按钮的DialogResult属性。虽然这样做没问题,但当您的事件处理程序执行诸如验证对话框内容之类的操作时,可能会导致意外情况。此时,您需要将窗体的DialogResult属性设回None。我个人更喜欢始终在Click事件处理程序中显式设置窗体的DialogResult。这是可调试的代码,可以让我知道为什么“不起作用”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接