按下enter时,防止派生表单上的AcceptButton事件

时间:2013-01-16 22:12:21

标签: vb.net winforms event-handling

我在一个系统中工作,其中大多数数据收集表单都是从基本表单派生的。 每个表单都有一个AcceptButton集,因此当按下Enter键时,它会引发AcceptButton事件。 我希望能够向用户显示警告,询问他们是否确定在按Enter后是否要保存。如果他们选择“是”,则会引发AcceptButton事件,如果他们选择“否”,则不会发生任何事情。 这可以从基类做到吗? 如果按下enter键,我已经尝试在ProcessCmdKey方法的基类中将AcceptButton设置为空,但我不知道如何重新设置它。

1 个答案:

答案 0 :(得分:1)

我认为你正在通过覆盖ProcessCmdKey方法走上正轨,但为什么将AcceptButton设置为空?像这样的实现就足够了

Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, keyData As System.Windows.Forms.Keys) As Boolean

    If (keyData = Keys.Enter) Then
      If (MessageBox.Show("Do you want to save?", "", MessageBoxButtons.YesNo) = Windows.Forms.DialogResult.No) Then
        Return True 'Eat the key press.
      End If
    End If

    Return MyBase.ProcessCmdKey(msg, keyData)

End Function

这将在按下enter时提示用户,如果他们回答No,则返回True,表示密钥已被处理,不会进行进一步处理。这样可以防止Button.Click事件发生。