VB.NET初学者园地

VB.NET社区贴子选辑,学习感悟--信箱:HanMo@mail.csdn.net

控制控件的输入顺序

下面是一个控制焦点输入的类

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(飘叶寻梦)

阅读更多
个人分类: 12 VB.NET编程技术
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭