2016-07-27 41 views
2

我正在處理傳統的VB6應用程序。我相信這可能與VB.NET有關,所以我會標記它,但請讓我知道,如果它是完全不同的(我不認爲這是),那麼我會刪除標記,以避免混淆。在VB中的選項卡控件

這裏是我的問題....

我有多個選項卡Tab控件:0 - 3.在TabStuff.Tab = 0,我有幾個文本框和組合框。用戶使用鍵盤TAB從索引控件移動。發生什麼事是一旦他們到達最後一個名爲txtCity的文本框 - 再次單擊鍵盤TAB,它將它們帶到TabStuff.Tab = 1。

我的問題是我對txtCity做了VALIDATE - 我調用一個函數來驗證幾個字段不是NULL,如果其中一個字段實際上是NULL,那麼我將顯示一個MSgBox並嘗試setFocus on控制。但是,當在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

所以,如果城市是空的,它顯示了MSGBOX,停留在片= 0和SETFOCUS上的控制,而是轉到下一個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 

這是我使用的代碼。我點擊TAB上txt1沒有輸入任何文字,所以這得到執行,但在msgbox,焦點被設置在txt2上

+0

我刪除了'vb.net'標籤。如果你的代碼是在傳統的'vb6'中,那麼它肯定與'vb.net'沒有關係。 – sstan

+0

@sstan夠公平!我認爲它會是類似的語法。 – BobSki

+1

也刪除vba標籤 - 它使用一個稍微不同的控制集。那就是說,它是什麼類型的控制? 'TabStrip'? 'SSTab'?還有別的嗎? – Comintern

回答

0

對於一些非常奇怪的原因 - 我似乎一直得到這種差異,因爲我在它的doign VALIDATE屬性。當我在LostFOCUS中輸入相同的代碼時,它似乎工作正常。感謝大家對此的幫助!

+0

您不應該在Validate事件中執行'setFocus';要麼在LostFocus事件中執行此操作,要麼設置爲「取消= True」。 –