我有一个奇怪的问题(可能只是为了理解)为什么在测试应用中,直到我按Tab键才会显示焦点rect。
我想显示一个带有两个radioboxes和两个按钮的对话框。当我显示对话框时,我希望在我的第一个单选按钮周围看到焦点。 (这样用户就可以看到焦点所在的位置。)我对控件进行了排序,并将tabindex属性设置为0到4,这样它们的顺序正确。 (radiobox 1有tabindex 0,...)
当我显示对话框时,第一个radiobox具有焦点,但它周围没有焦点矩形。 (直到我按Tab键。)
我创建了一个完全空的winforms项目(Visual Studio 2010),添加了控件并启动它。所以没有什么特别的。
有人能给我一个暗示我做错了吗?
对不起,这是我的样本代码:
Public Class Form1
Private Sub Button1_Click(sender As System.Object, _
e As System.EventArgs) _
Handles Button1.Click
Me.Close()
End Sub
Private Sub Button2_Click(sender As System.Object, _
e As System.EventArgs) _
Handles Button2.Click
Me.Close()
End Sub
Private Sub Form1_Shown(sender As Object, _
e As System.EventArgs) _
Handles Me.Shown
RadioButton1.Focus()
RadioButton1.Select()
SendKeys.SendWait("{TAB}")
SendKeys.SendWait("+{TAB}")
End Sub
End Class
答案 0 :(得分:5)
正如我评论的那样,这实际上是用户偏好设置。
但要显示矩形,请尝试继承您自己的RadioButton并覆盖ShowFocusCues
函数:
Public Class RadioWithFocus
Inherits RadioButton
Protected Overrides ReadOnly Property ShowFocusCues() As Boolean
Get
Return True
End Get
End Property
End Class
答案 1 :(得分:1)
在表单的初始化方法中或在适用的任何地方使用继承的Control.Focus()
。类似的东西:
public Form1 () {
//Other stuff here
radiobox1.Focus();// If this is the name of your control
}
要查看的另一种方法是Form.Activate
。这可能更适合在这种情况下使用
此外,ActiveControl
可能会有所帮助。
答案 2 :(得分:0)
正如LarsTech所说,这是一个用户设置。对于Windows 7,您可以在此处找到此设置: 打开控制面板/轻松访问中心/使键盘更易于使用。
找一个带有“下划线键盘快捷键和访问键”文本的复选框并进行检查。
重新运行您的应用,您会看到焦点问题现在会在您的表单首次加载时显示。
享受
答案 3 :(得分:0)
对于Win32 / C ++,将WM_CHANGEUISTATE消息发送到父窗口:
paymentForm.build()