当一个标签页第一次出现时,我似乎无法将输入焦点放在文本框上(我使用的是Windows窗体,VB.NET 3.5)。
我在标签页的面板上有一个文本框,我希望当选项卡页面出现时焦点在文本框上。我希望用户能够立即在焦点文本框中开始键入,而不必单击文本框。我按照我想要的顺序设置了制表位,文本框是第一个制表位。选项卡停止工作,除了当选项卡页面出现时,焦点不在文本框上,即选项卡顺序中的第一个。
在选项卡页面的Enter事件处理程序中,我调用了文本框的Focus方法,但它返回False,什么也不做,没有错误消息。我知道我可以访问文本框,因为在代码的同一点,我可以设置文本框的文本。
如果重要的话,标签页的布局有点复杂:
frmFoo/TabControl1/TabPageX/Panel1/Panel2/TextBox1
我想将焦点设置在TextBox1上。
1.什么是最好的方法来获得所需的文本框的焦点?
1.如果设置焦点是最好的方法,为什么textbox.focus()方法失败了?
9条答案
按热度按时间hfsqlsce1#
我假设你正在尝试在表单加载事件处理程序中设置焦点?如果是这样,你需要执行
Me.Show()
来实际创建屏幕控件,然后才能设置焦点。沿着如下:如果不执行
Me.Show()
,则在加载事件完成之前不会显示表单。对于选项卡控件,处理
_SelectedIndexChanged
事件:如果选择的第一个字段是选项卡控件上的文本框,则仍需要如上所示在load事件中设置初始焦点。
gjmwrych2#
尝试以下两种方法之一:
或
hrirmatl3#
在
OnShown
事件中执行control.Focus()
。你不需要任何DoEvents逻辑,反正我也不需要。wvt8vs2t4#
您应该使用
TabControl
的Selected
事件正如我在检查
TabControl.Selected
和TabPage.Enter
事件可以设置选择TextBox
.我认为有一些其他元素窃取焦点.请varifyqlvxas9a5#
我在网上找到的任何解决方案都不能解决控件位于选项卡页上的问题。
然而,这起作用:
(1)将控件的TabIndex设置为0。
(2)在处理tabpage事件的代码中,执行以下操作:
如果SendKeys似乎不是有效的语句,请确保在代码文件的顶部有以下导入:
up9lanfz6#
我发现TabControl在Selected事件完成时获得焦点。为了使此工作正常,我使用TabPage的Paint事件来设置所需对象的焦点。
63lcw9qa7#
尝试如下形式的
Activated
事件:这是保证工作。
3xiyfsfu8#
我曾经遇到过同样的问题,但我使用
Me.activate()
函数解决了它。33qvvth19#
你要试试这些吗?