Aug 16
最近做项目遇到了一个比较bt的问题,就是客户要求按Enter的时间实现Tab键的效果.而且还要跳过button之类的东东. 最后用了三个函数来解决了.在load的时间调用第一个函数就好了.如果页面有其他的容器,自己参照myGetNextControl添加一个case就好了
VB是个很神奇的语言,VB.net在很多时间继承了这些神奇的地方.
Private Sub TabHandleEnter(ByRef controls As Control.ControlCollection) For Each ctl As Control In controls If ctl.GetType.Name.Equals("GroupBox") Or ctl.GetType.Name.Equals("Panel") Then TabHandleEnter(ctl.Controls) Else AddHandler ctl.KeyDown, AddressOf EnterKeyDown End If Next End Sub
''' <summary>
''' 按下Enter时的处理
''' </summary>
Private Sub EnterKeyDown(ByVal sender As Object, ByVal e As KeyEventArgs)
If Not e.Shift And e.KeyCode = Keys.Enter Then
myGetNextControl(CType(sender, Control), True)
ElseIf e.Shift And e.KeyCode = Keys.Enter Then
myGetNextControl(CType(sender, Control), False)
End If
End Sub
Private Sub myGetNextControl(ByVal ctl As Control, ByVal forward As Boolean) Dim vControl As Control = GetNextControl(ctl, forward) If vControl Is Nothing Then Exit Sub
If Not "SKIP".Equals(vControl.AccessibleName) And vControl.Enabled And vControl.Visible Then
Select Case vControl.GetType.Name
Case "GroupBox"
myGetNextControl(vControl, forward)
Exit Sub
Case "Panel"
myGetNextControl(vControl, forward)
Exit Sub
Case "RadioButton"
If CType(vControl, RadioButton).Checked Then
vControl.Focus()
Exit Sub
Else
Exit Select
End If
Case "Label"
Exit Select
Case Else
vControl.Focus()
Exit Sub
End Select
End If
myGetNextControl(vControl, forward)
End Sub
如果只是简单的把Enter替换成Tab的话,把第二个函数的内容换成发送一个tab键就okay了!

August 16th, 2008 at 8:03 pm
郁闷,代码显示有点问题,明天在收拾了…
[回复]