【发布时间】:2012-07-30 17:43:55
【问题描述】:
我对这种情况有疑问(见标题)。我在一个大面板中有 6 个子面板。我制作了一个继承自主文本框的 TextBox 类。我正在尝试使用 KeyPressed 事件处理程序来处理 Enter 键。当用户按下 Enter 键时,它会从子面板内的一个 TextBox 移动到下一个子面板。到目前为止,我已经让 Enter Key Event 处理程序为焦点所在的面板工作,而无需跳转到下一个面板。
下面是我用来控制动作的子程序。 问题是我无法从一个子面板跳到另一个子面板。任何帮助将不胜感激!
Protected Shared Sub NextControl(ByVal tControl As Control, ByVal Direction As Boolean)
Dim pControl As Control = tControl.TopLevelControl
tControl = pControl.GetNextControl(tControl, Direction)
If Direction = False Then
Dim tParent As Control
While TypeOf tControl Is UserControl
tParent = tControl.Parent
tControl = pControl.GetNextControl(tControl, Direction)
If tControl.Parent Is tParent Then
Exit While
End If
End While
End If
If tBox_P00.ControlNesting > 0 Then
'Dim i As Integer
pControl = tControl.Parent
For i As Integer = 0 To tBox_P00.ControlNesting - 2
pControl = pControl.Parent
Next
End If
If Not tControl Is Nothing Then
Do Until (tControl.TabStop = True) AndAlso (tControl.Enabled = True) AndAlso (tControl.Visible = True) AndAlso (TypeOf tControl Is Tbx00)
tControl = pControl.GetNextControl(tControl, Direction)
'Last in the Panel
If tControl Is Nothing Then
tBox_P00.Select(0, tBox_P00.TextLength)
Beep()
Exit Sub
End If
Loop
tControl.Focus()
Else
tBox_P00.Select(0, tBox_P00.TextLength)
Beep()
End If
Exit Sub
End Sub
【问题讨论】:
-
我没有看到任何问题。究竟出了什么问题?
-
该代码中循环的意图非常不清楚。只需调用一次 GetNextControl() 即可。
-
子面板内至少有10个其他文本框。循环是为了过滤掉输入的非输入。所以循环实际上会寻找并尝试定位下一个输入框。
-
为什么在不应获得焦点的控件上将 TabStop 属性设置为 true?解决这个问题,GetNextControl() 就能完成工作。
-
TapStop 属性有助于过滤。除输入文本框外,每个输出文本框都将制表位设置为 false。 GetNextControl() 似乎只在焦点的子面板中工作 - 它不能帮助我转移到包含其他输入字段的下一个子面板
标签: vb.net