我有一个表单,上面有大约40个不同的文本框。最近,他们要求我添加功能,这样他们就可以在按enter时运行报告(而不是单击按钮)。因此,我尝试在我的窗体上创建一个通用的事件处理程序,以捕获在各种控件中引发的事件(而不是将该处理程序附加到我创建的任何控件)。我已经让代码运行了,但是事件似乎没有冒泡到主窗体。你能指出我遗漏了什么吗?
Public Class TextboxSelect
Inherits System.Windows.Forms.TextBox
Public Sub New()
AddHandler Enter, AddressOf selectText
AddHandler KeyDown, AddressOf raiseEnterEvent
End Sub
Public Event enterPressed As EventHandler
Private Sub selectText(sender As Object, e As EventArgs)
Dim text As TextboxSelect = CType(sender, TextboxSelect)
text.SelectionStart = 0
text.SelectionLength = text.Text.Length + 1
End Sub
Public Sub raiseEnterEvent(sender As Object, e As KeyEventArgs)
RaiseEvent enterPressed(Me, New EventArgs)
If (e.KeyCode = Keys.Enter) Then
RaiseEvent enterPressed(Me, New EventArgs)
End If
End Sub End Class主要形式:
Private Sub textboxEnterSearch(sender As Object, e As EventArgs) Handles this.enterPressed
MessageBox.Show("You hit enter in a textbox!")
End Sub在调试时,我引发了enterPressed事件,但该事件似乎没有冒泡到窗体中。
发布于 2017-05-11 01:23:08
我最终在表单的load部分添加了一个处理程序:
Dim cv = GetAllControls(Me).OfType(Of TextboxSelect)
For Each obj In cv
Dim bob As TextboxSelect = CType(obj, TextboxSelect)
AddHandler bob.KeyDown, AddressOf enterBox
Next下面是代码中引用的函数:
Private Function GetAllControls(container As Control) As IEnumerable(Of Control)
Dim controlList As New List(Of Control)()
For Each c As Control In container.Controls
controlList.AddRange(GetAllControls(c))
If TypeOf c Is TextBox Then
controlList.Add(c)
End If
Next
Return controlList
End Function然后,在处理程序中,我根据命名约定调用了不同的函数(谢天谢地,这是一致的)。
用于选择区分不同控件的代码:
Private Sub enterBox(ByVal sender As Object, ByVal e As KeyEventArgs)
If e.KeyCode = Keys.Enter Then
If CType(sender, TextboxSelect).Name Like "*Cmd1*" Then
Cmd1_Click(sender, e)
Else
Cmd2Search_Click(sender, e)
End If
End If
End Sub发布于 2017-02-22 04:55:55
您不需要在控件上使用自定义事件,也不需要在窗体拥有的每个控件上附加处理程序。
在设计器中,将窗体的KeyPreview属性设置为True。然后处理form_KeyDown事件,并检查是否按下了Enter键。窗体的KeyPreview属性首先在窗体上触发键事件,然后在任何控件上触发实际按下的键事件。
发布于 2017-02-23 00:32:32
去检查是谁引发了这个事件-
If TypeOf ActiveControl Is TextBox Then
....https://stackoverflow.com/questions/42377327
复制相似问题