Form1:
Private Sub TextBox1_GotFocus()
Me.Hide
Me.Enabled = False
Form2.Show
Form2.SetFocus
End Sub
Form2:
Private Sub Form_Activate()
Me.SetFocus
TextBox1.SetFocus
'MsgBox "!"
End Sub
如果沒有msgbox的話,Form2雖然看起來獲得了焦點,但是不能操作,必須點擊任務欄上的圖示再次獲得焦點才能操作。但是如果有Msgbox的話,卻可以直接獲得焦點。
我的問題是,我的代碼是否有問題,怎么樣才能直接獲得焦點?
uj5u.com熱心網友回復:
這是作業系統的特性,禁止普通表單獲得焦點(只能在任務欄上閃爍)。如果你用 Win98 就是直接獲得焦點的。
uj5u.com熱心網友回復:
Public Sub myFocus(hWnd&)api和常數宣告自己去api工具里復制
Dim hWnd&, hForeWnd&, dwForeID&, dwCurID&
hForeWnd = GetForegroundWindow()
dwForeID = GetWindowThreadProcessId(hForeWnd, 0)
dwCurID = GetCurrentThreadId()
AttachThreadInput dwCurID, dwForeID, True
SetWindowPos hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE
SetWindowPos hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE + SWP_NOMOVE
SetForegroundWindow hWnd
AttachThreadInput dwCurID, dwForeID, False
End Sub
uj5u.com熱心網友回復:
非常感謝,我試試!
不過我找到了出現問題的原因是GotFocus的問題,如果換成MouseUp或者DblClick就沒有問題,我再看看!
uj5u.com熱心網友回復:
我在VB6的IDE下試了一下,樓主的那段代碼也沒有問題啊,跟“預期效果”一樣。(不用MsgBox那一句)
并且 Form2.SetFocus 這一句也是可以省略的。

滑鼠點擊 Form1的TextBox或者按鍵盤TAB鍵讓TextBox1得到焦點,
Form1就馬上消失、彈出Form2, Form2中的TextBox1上游標閃爍、可以直接接受鍵盤輸入。
uj5u.com熱心網友回復:
加上一句,form2.TextBox1.SetFocusuj5u.com熱心網友回復:
SetFocus 方法
將焦點移至指定的控制元件或表單。
語法
object.SetFocus
object 所在處代表物件運算式,其值是“應用于”串列中的一個物件。
說明
物件必須是 Form 物件、MDIForm 物件或者能夠接收焦點的控制元件。呼叫 SetFocus 方法以后,任何的用戶輸入將指向指定的表單或控制元件。
焦點只能移到可視的表單或控制元件。因為在表單的 Load 事件完成前表單或表單上的控制元件是不可視的,所以如果不是在 Form_Load 事件程序完成之前首先使用 Show 方法顯示表單的話,是不能使用 SetFocus 方法將焦點移至正在自己的 Load 事件中加載的表單的。
也不能把焦點移到 Enabled 屬性被設定為 False 的表單或控制元件。如果已在設計時將 Enabled 屬性設定為 False,必須在使用 SetFocus 方法使其接收焦點前將 Enabled 屬性設定為 True。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/55838.html
標籤:VB基礎類
上一篇:VB中一個表單的show事件
