.NET 选项卡控件选定索引 - 奇怪的行为
.NET Tab Control Selected Index - strange behaviour
我有一个包含 7 页的选项卡控件。我有一个视图模型,它启用两个按钮,用于通过选项卡控件向后和向前导航。这工作正常,但开始出现奇怪的行为,因此当您位于选项卡索引 1 上并想将其设置为选项卡索引 0 时,它会立即选择选项卡索引 3,并显示没有控件的选项卡页面。从任何其他标签页按后退按钮没有问题,按前进按钮,类似。我尝试 'hard-coding' 选定的选项卡,并得到完全相同的结果。代码如下:
public class ViewModel
Private WithEvents tabControl As TabControl
.
.
.
Public Sub NextTab()
If tabControl.SelectedIndex < tabControl.TabCount Then
tabControl.SelectedIndex += 1
End If
End Sub
Public Sub PreviousTab()
If tabControl.SelectedIndex > 0 Then
' The code in the If statement below is trying to work around the problem, none of which has been successful
If tabControl.SelectedIndex = 1 Then
'tabControl.SelectedIndex = 0
tabControl.SelectedTab = tabControl.TabPages(0)
tabControl.TabPages(0).Focus()
Else
tabControl.SelectedIndex -= 1
End If
End If
End Sub
.
.
.
End Class
Dim vm as new ViewModel(tcInfoTabs)
.
.
.
Private Sub btnNext_Click(sender As Object, e As System.EventArgs) Handles btnNext.Click
vm.NextTab()
End Sub
Private Sub btnPrevious_Click(sender As Object, e As System.EventArgs) Handles btnPrevious.Click
vm.PreviousTab()
End Sub
尝试将制表符从索引 1 移动到索引零总是导致它移动到索引 3。硬编码立即数 window 中的位置具有相同的结果:tabControl.SelectedIndex = 1 - > 最终指向 3。表格的其余部分没有其他事件。如果您在选项卡 2 上减去 1,您最终会在选项卡 1 上。如果您在选项卡 1 上减去 1,您最终会在选项卡 3 上。这是有效的,但已停止。我正在使用.Net 4.0,欢迎任何建议。
找到答案:PEBKAC - 键盘和椅子之间存在问题。
在每个标签页的底部,我有一个小文本框,当用户在标签页上的字段中切换时,它会在用户输入时自动将用户移至下一个标签。该字段位于每个标签页标签顺序的底部。然而,当第一个标签页被选中时,该字段的 Enter 事件将被触发,将其移动到下一页,同样的事件将被触发,下一页再次发生同样的事件。这仅在向后移动时发生。不知道为什么这个 Enter 事件会在 Tab 键顺序末尾的字段上触发,并且只有当您在程序控制下更改了 Tab 键索引时才会触发。实际上,单击第一个选项卡并没有触发该字段的 Enter 事件。
简短修复 - kludge - 每次用户向前或向后移动时添加一个由按钮设置的标志,告诉该字段事件不要触发。
我有一个包含 7 页的选项卡控件。我有一个视图模型,它启用两个按钮,用于通过选项卡控件向后和向前导航。这工作正常,但开始出现奇怪的行为,因此当您位于选项卡索引 1 上并想将其设置为选项卡索引 0 时,它会立即选择选项卡索引 3,并显示没有控件的选项卡页面。从任何其他标签页按后退按钮没有问题,按前进按钮,类似。我尝试 'hard-coding' 选定的选项卡,并得到完全相同的结果。代码如下:
public class ViewModel
Private WithEvents tabControl As TabControl
.
.
.
Public Sub NextTab()
If tabControl.SelectedIndex < tabControl.TabCount Then
tabControl.SelectedIndex += 1
End If
End Sub
Public Sub PreviousTab()
If tabControl.SelectedIndex > 0 Then
' The code in the If statement below is trying to work around the problem, none of which has been successful
If tabControl.SelectedIndex = 1 Then
'tabControl.SelectedIndex = 0
tabControl.SelectedTab = tabControl.TabPages(0)
tabControl.TabPages(0).Focus()
Else
tabControl.SelectedIndex -= 1
End If
End If
End Sub
.
.
.
End Class
Dim vm as new ViewModel(tcInfoTabs)
.
.
.
Private Sub btnNext_Click(sender As Object, e As System.EventArgs) Handles btnNext.Click
vm.NextTab()
End Sub
Private Sub btnPrevious_Click(sender As Object, e As System.EventArgs) Handles btnPrevious.Click
vm.PreviousTab()
End Sub
尝试将制表符从索引 1 移动到索引零总是导致它移动到索引 3。硬编码立即数 window 中的位置具有相同的结果:tabControl.SelectedIndex = 1 - > 最终指向 3。表格的其余部分没有其他事件。如果您在选项卡 2 上减去 1,您最终会在选项卡 1 上。如果您在选项卡 1 上减去 1,您最终会在选项卡 3 上。这是有效的,但已停止。我正在使用.Net 4.0,欢迎任何建议。
找到答案:PEBKAC - 键盘和椅子之间存在问题。 在每个标签页的底部,我有一个小文本框,当用户在标签页上的字段中切换时,它会在用户输入时自动将用户移至下一个标签。该字段位于每个标签页标签顺序的底部。然而,当第一个标签页被选中时,该字段的 Enter 事件将被触发,将其移动到下一页,同样的事件将被触发,下一页再次发生同样的事件。这仅在向后移动时发生。不知道为什么这个 Enter 事件会在 Tab 键顺序末尾的字段上触发,并且只有当您在程序控制下更改了 Tab 键索引时才会触发。实际上,单击第一个选项卡并没有触发该字段的 Enter 事件。
简短修复 - kludge - 每次用户向前或向后移动时添加一个由按钮设置的标志,告诉该字段事件不要触发。