.NET选项卡控件选择的索引 - 奇怪的行为

时间:2015-07-07 20:58:23

标签: .net vb.net .net-4.0 tabcontrol

我有一个标签控件,其中有7页。我有一个视图模型,它可以通过选项卡控件启用两个按钮,用于向后和向前导航。这工作得很好,但是开始表现得很奇怪,所以当你定位在选项卡索引1上,并希望将其设置为选项卡索引0时,它会立即选择选项卡索引3,并显示该选项卡页面上没有任何控件。从任何其他标签页按下后退按钮没有问题,按下前进按钮,类似。我尝试对所选标签进行“硬编码”,得到完全相同的结果。代码如下所示:

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.在立即窗口中对位置进行硬编码具有相同的结果:tabControl.SelectedIndex = 1 - &gt;最终指向3.表格的其余部分没有其他事件。如果您在选项卡2上并减去1,则最终会显示在选项卡1上。如果您位于选项卡1上并减去1,则最终会显示在选项卡3上。这样可以正常工作并停止。我正在使用.Net 4.0,欢迎任何建议。

1 个答案:

答案 0 :(得分:0)

找到答案:PEBKAC - 键盘和椅子之间存在问题。 在每个标签页的底部,我有一个小文本框,当用户选中标签页上的字段时,会在输入时自动将用户移动到下一个标签。此字段位于每个标签页的标签顺序的底部。但是,当选择了第一个标签页时,将触发此字段的Enter事件,将其移动到下一页,同一事件将触发,同样在下一页上再次触发。这只发生在向后移动时。不知道为什么这个Enter事件会触发Tab键顺序末尾的字段,并且只有在程序控制下更改了tab选项卡时才会触发。实际上,单击第一个选项卡不会触发此字段的Enter事件。

简短修复 - kludge - 每次用户向前或向后移动时添加按钮设置的标记,告知此字段事件不会触发。