Vb.net 在WinForms中,如何在运行时设置按钮的tabIndex?
我有一个通用消息框,其中有几个面板,我们在运行时在其中添加控件 在我的表单中,我已经有了Vb.net 在WinForms中,如何在运行时设置按钮的tabIndex?,vb.net,winforms,Vb.net,Winforms,我有一个通用消息框,其中有几个面板,我们在运行时在其中添加控件 在我的表单中,我已经有了pnlBottom,上面有pnlButtons以及一些其他控件 现在在运行时,我将添加一个OK按钮到pnlButtons,它位于pnlBottom上。我没有为Designer.vb文件中的任何控件设置TabIndex 我试图使用下面的代码将焦点放在OK按钮上,但它不起作用 For Each control As Control In Me.Controls If TypeOf (control) Is
pnlBottom
,上面有pnlButtons
以及一些其他控件
现在在运行时,我将添加一个OK
按钮到pnlButtons
,它位于pnlBottom
上。我没有为Designer.vb
文件中的任何控件设置TabIndex
我试图使用下面的代码将焦点放在OK
按钮上,但它不起作用
For Each control As Control In Me.Controls
If TypeOf (control) Is Panel Then
Dim pnlBottons As Panel = CType(control, Panel)
If pnlBottons.Name = "pnlBottom" Then
For Each ctrl As Control In control.Controls
Dim pnlButtons As Panel = CType(ctrl, Panel)
If pnlButtons.Name = "pnlButtons" Then
For Each ctrlbtn As Control In ctrl.Controls
If TypeOf (ctrlbtn) Is Button Then
Dim textBox As Button = CType(ctrlbtn, Button)
textBox.Parent.Parent.TabIndex = 0
textBox.Parent.TabIndex = 0
textBox.TabIndex = 0
End If
Next
End If
Next
End If
End If
Next
在这里,我将pnlBottom
、pnlButtons
和OK
按钮的选项卡索引设置为0
请建议如何对焦OK
按钮。您可以使用以下方法之一:
1-控制。选择方法
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Mybase.Load
Me.OKButton.Select()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Mybase.Load
Me.Show()
Me.OKButton.Focus()
End Sub
Focus是一种低级方法,主要用于自定义控件
作者。相反,应用程序程序员应该使用Select方法
或子控件的ActiveControl属性,或激活
用于表单的方法
2-Form.ActiveControl属性
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Mybase.Load
Me.ActiveControl = Me.OKButton
End Sub
3-控制聚焦方法
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Mybase.Load
Me.OKButton.Select()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Mybase.Load
Me.Show()
Me.OKButton.Focus()
End Sub
我们调用Me.Show()的原因是将表单可见设置为true。根据:
可以在窗体的加载事件中使用Control.Focus方法
仅在窗体的Visible属性之后设置控件的焦点
设置为True
如果您不能使用
Me.ok按钮
您可以找到如下所示的控件:
Dim control = Me.Controls.Find("OKButton", True).FirstOrDefault()
If Not control Is Nothing Then
control.Select() 'or other stuff
End If
如果textBox.Text=“确定”,那么textBox.Focus()
?(没有这些父项和TabIndex)这不是TabIndex应该如何工作的。TabIndex确定通过tab键访问控件的顺序(从最低索引到最高索引,无特定的第一个/最后一个索引)。要在运行时将焦点设置在特定控件上,可以使用focus()方法,正如前面的注释所建议的那样。我为StackOverflow制作了一个小工具,可以轻松地将代码缩进增加或减少4个空格。要使用它,textBox.Focus()在运行时没有在我的按钮控件上设置焦点。所以我想我可以使用tab索引o(零)来显示focus on OK按钮,但它不工作。什么控件有focus?