VB 中的选项卡控件

Tab control in VB

我正在处理遗留的 VB6 应用程序。我确定这可能与 VB.NET 有关,所以我会标记它,但请让我知道它是否完全不同(我认为不是)然后我会删除标记以避免混淆。

这是我的问题....

我有一个包含多个选项卡的选项卡控件:0 - 3。在 TabStuff.Tab = 0 上,我有几个文本框和组合框。用户使用键盘 TAB 从索引控件移动。发生的事情是一旦他们到达最后一个控件,即名为 txtCity 的文本框 - 并再次单击键盘 TAB,它会将他们带到 TabStuff.Tab=1.

我的问题是我在 txtCity 上执行 VALIDATE - 我调用了一个函数来验证几个字段是否为 NULL,如果其中一个字段实际上为 NULL,那么我会显示一个 MSgBox 并尝试 setFocus那个控制。但是,当在 msgbox 上单击“确定”时,它会转到下一个选项卡 TabStuff.tab=1,这是不正确的。

这是我的一些代码...

Dim FirstName, City as String
flag=false

firstName = txtName.text
city = txtcity.text
if FirstName="" or isnull(FirstName) then 
     msgbox "Please enter Name"
     tabstuff.tab=0 
     txtname.setfocus
     exit sub
elseif city = "" or isnull(city) then
     msgbox "Please enter city"
     tabstuff.tab=0
     txtcity.setfocus
     exit sub
end if

flag=true

此代码在 txtCITY_VALIDATE

因此,如果 city 为空,它会显示 MsgBox,停留在 Tab=0 并将焦点设置在该控件上,而是转到下一个 tab=1 并将焦点设置在该选项卡的第一个控件上。

编辑:

在txtCITY_LostFocus

If Flag = False Then
    TabStuff.Tab = 0
    Exit Sub
End If

我添加了这个,但它仍然转到 tabstuff.tab=1 将焦点设置在选项卡的第一个控件上

编辑 2:

在一个新项目中,我创建了 txt1 和 txt2 - 我分别设置了 TabIndex 0 和 1。

Private Sub Txt1_Validate(Cancel As Boolean)
If Txt1.Text = "" Then
    MsgBox "no text in txt1"
    Txt1.SetFocus
End If
End Sub

这是我使用的代码。我在 txt1 上单击 TAB 而没有输入任何文本,所以它被执行了,但是在 msgbox 之后,焦点被设置在 txt2

出于一些非常奇怪的原因 - 我似乎一直在得到这种差异,因为我在 VALIDATE 属性 中做了它。当我在 LostFOCUS 中输入相同的代码时,它似乎工作正常。感谢大家对此的帮助!