Form1:Private Sub TextBox1_GotFocus()
Me.Hide
Me.Enabled = False
Form2.Show
Form2.SetFocus
End SubForm2:
Private Sub Form_Activate()
Me.SetFocus
TextBox1.SetFocus
'MsgBox "!"
End Sub如果没有msgbox的话,Form2虽然看起来获得了焦点,但是不能操作,必须点击任务栏上的图标再次获得焦点才能操作。但是如果有Msgbox的话,却可以直接获得焦点。我的问题是,我的代码是否有问题,怎么样才能直接获得焦点?
Me.Hide
Me.Enabled = False
Form2.Show
Form2.SetFocus
End SubForm2:
Private Sub Form_Activate()
Me.SetFocus
TextBox1.SetFocus
'MsgBox "!"
End Sub如果没有msgbox的话,Form2虽然看起来获得了焦点,但是不能操作,必须点击任务栏上的图标再次获得焦点才能操作。但是如果有Msgbox的话,却可以直接获得焦点。我的问题是,我的代码是否有问题,怎么样才能直接获得焦点?
解决方案 »
- VB中windowsmediaplayer如何定位播视频
- com中由CoTaskMemAlloc分配的内存,在vb中需要释放吗?
- 求助关于ListBox 问题 如何用SendMessage 选中一项
- ADO,ODBC,OLEDB四种数据库访问方式的区别
- 如何刷新数据库显示?
- 交朋友!!!!大家联系我的主页http://shawls.yeah.net电子邮件[email protected]``````OICQ:9181729
- 麻烦大家来看看,api的问题
- VB datagrid 如何设置奇数行与偶数行颜色不一致
- 有人知道怎么用VB做显示网页源代码吗?
- VB下控制ACCESS数据库.报表输出用哪个办法好?
- VB 3265 错误,在对应所需名称或序数的集合中未找到项目
- vb.net DateTimePicker控件显示2个日期调整日期2个一起变化谁有办法
如果你用 Win98 就是直接获得焦点的。
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 Subapi和常数声明自己去api工具里复制
非常感谢,我试试!不过我找到了出现问题的原因是GotFocus的问题,如果换成MouseUp或者DblClick就没有问题,我再看看!
(不用MsgBox那一句)并且 Form2.SetFocus 这一句也是可以省略的。
鼠标点击 Form1的TextBox或者按键盘TAB键让TextBox1得到焦点,
Form1就马上消失、弹出Form2, Form2中的TextBox1上光标闪烁、可以直接接受键盘输入。
SetFocus 方法
将焦点移至指定的控件或窗体。语法object.SetFocusobject 所在处代表对象表达式,其值是“应用于”列表中的一个对象。说明对象必须是 Form 对象、MDIForm 对象或者能够接收焦点的控件。调用 SetFocus 方法以后,任何的用户输入将指向指定的窗体或控件。焦点只能移到可视的窗体或控件。因为在窗体的 Load 事件完成前窗体或窗体上的控件是不可视的,所以如果不是在 Form_Load 事件过程完成之前首先使用 Show 方法显示窗体的话,是不能使用 SetFocus 方法将焦点移至正在自己的 Load 事件中加载的窗体的。也不能把焦点移到 Enabled 属性被设置为 False 的窗体或控件。如果已在设计时将 Enabled 属性设置为 False,必须在使用 SetFocus 方法使其接收焦点前将 Enabled 属性设置为 True。