e.Handled 在 VB.net 2010 中不起作用

Posted

技术标签:

【中文标题】e.Handled 在 VB.net 2010 中不起作用【英文标题】:e.Handled is not working in VB.net 2010 【发布时间】:2012-09-16 00:52:05 【问题描述】:

我在 vb.net 中制作了一个快速的网络浏览器,我有它,所以当您按下 Enter 键时,它会导航到 textbox1 中的网页。唯一的问题是,每次我按 Enter 键时它都会发出哔哔声。我尝试使用 e.Handled = True,但它没有做任何事情。这是我的按键代码

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown

    If e.KeyCode = Keys.Enter Then
        e.Handled = True
        WebBrowser1.Navigate(TextBox1.Text)
    End If

End Sub

我以为 e.Handled 会消除烦人的哔哔声,但事实并非如此。

【问题讨论】:

如果 Navigate 被移除,蜂鸣声会“停止”吗? (例如,e.Handled 是红鲱鱼吗?) 不,如果我移除 Navigate,仍然会发出哔声。当我按下回车键时,我需要一种停止哔哔声的方法,许多网站和论坛都说使用 e.Handled = True 【参考方案1】:

您想要的KeyEventArgs 属性不是Handled,而是SuppressKeyPress。

Private Sub TextBox1_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox1.KeyDown
    If e.KeyCode = Keys.Enter Then
        e.SuppressKeyPress = True
        WebBrowser1.Navigate(TextBox1.Text)
    End If

End Sub

来自第一个 MSDN 链接:

Windows 窗体中的不同控件以不同方式实现处理。对于像 TextBox 这样的子类本机 Win32 控件的控件,它被解释为意味着不应将关键消息传递给底层本机控件。如果在 TextBox 上将 Handled 设置为 true,则该控件不会将按键事件传递给底层 Win32 文本框控件,但仍会显示用户键入的字符。

如果要阻止当前控件接收按键,请使用 SuppressKeyPress 属性。

【讨论】:

以上是关于e.Handled 在 VB.net 2010 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

为啥 e.Handled 不停止哔哔声?

在 VB.NET 中使用 OleDb.NET 调用 Access 2010 存储选择查询的异常

在 VB.NET 2010 中使用 GetAsyncKeyState 时的 PInvokeStackImbalance

如何在 vb.net 2010 的我的文档/屏幕截图中保存 jpg 文件

e.Handled的理解

从 Visual Studio 2010 (VB.NET) 读取访问查询