下面是一个控制焦点输入的类
Public Class controlFocus
Dim Fctrl() As Control '定义一个控件数组,用来记录需要控制输入焦点的控件。
Dim index As Int32 '控件的索引变量
Sub New(ByVal cunt As Int32)’构造函数,设定有多少个控件需要控制焦点。
'参数为控件的个数,cunt>1
If cunt < 1 Then Throw New Exception '例外
index = 0 ‘初始化控件索引
ReDim Fctrl(cunt - 1) '设置控件的个数,给控件数组赋值。
End Sub
Public Sub AddControl(ByVal ctrl As Control)’把控件添加到控件数组中,并用委托来设置控件的keydown事件。
Fctrl(index) = ctrl
index += 1
AddHandler ctrl.KeyDown, AddressOf setControlFocus '设置事件处理程序
End Sub
Private Sub setControlFocus(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs)
Dim curCtrl As Control
Dim nextCtrl As Control '下一个接受焦点的控件
curCtrl = CType(sender, Control) '当前控件
Dim i As Int32
Select Case e.KeyCode
Case Keys.Enter, Keys.Right, Keys.Down ‘当按下的键是回车、向右、向下时响应。
i = Fctrl.IndexOf(Fctrl, curCtrl) '搜索发送消息的控件
i = (i + 1) Mod Fctrl.Length '下一个接受焦点的控件的索引
Fctrl(i).Focus()
Case Keys.Up, Keys.Left‘当按下的键是向上、向左时响应。
i = Fctrl.IndexOf(Fctrl, curCtrl) '搜索发送消息的控件
i = (i - 1) Mod Fctrl.Length '上一个接受焦点的控件的索引
If i >= 0 Then Fctrl(i).Focus()
End Select
End Sub
End Class
应用:
如你要控制一个BTTON和两个TEXTBOX控件的输入焦点。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim cfs As New controlFocus(3)
cfs.AddControl(TextBox1)
cfs.AddControl(TextBox2)
cfs.AddControl(Button1)
End Sub
-----------------------------------整理者:tl_pear(飘叶寻梦)