我有一个标签控件,其中有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,欢迎任何建议。
答案 0 :(得分:0)
找到答案:PEBKAC - 键盘和椅子之间存在问题。 在每个标签页的底部,我有一个小文本框,当用户选中标签页上的字段时,会在输入时自动将用户移动到下一个标签。此字段位于每个标签页的标签顺序的底部。但是,当选择了第一个标签页时,将触发此字段的Enter事件,将其移动到下一页,同一事件将触发,同样在下一页上再次触发。这只发生在向后移动时。不知道为什么这个Enter事件会触发Tab键顺序末尾的字段,并且只有在程序控制下更改了tab选项卡时才会触发。实际上,单击第一个选项卡不会触发此字段的Enter事件。
简短修复 - kludge - 每次用户向前或向后移动时添加按钮设置的标记,告知此字段事件不会触发。