为什么在按Tab键之前不会显示Focus Rectangle?

时间:2012-02-10 10:40:04

标签: c# .net vb.net winforms

我有一个奇怪的问题(可能只是为了理解)为什么在测试应用中,直到我按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

4 个答案:

答案 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()