2012-02-10 13 views
5

テストアプリで、タブキーを押すまで、フォーカス矩形が表示されないのはなぜか分かりません。Tabキーを押すまでフォーカス矩形が表示されないのはなぜですか?

2つのラジオボックスと2つのボタンがあるダイアログを表示したいと思います。私はダイアログを表示するとき、私は最初のラジオボタンの周りにフォーカスのrectを見たいと思います。私はコントロールを注文し、tabindexプロパティを0から4に設定して、正しい順序になるようにしました。 (ラジオボックス1はtabindex 0、...を持っています)

私はダイアログを表示すると、最初のラジオボックスにフォーカスがありますが、その周りにフォーカス矩形はありません。 (私が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

エヘン...私は私が(64ビット) – AlexS

+0

タフWindows 7を使用していますことを、言うことを忘れてしまいました修正するバグ、私は何もしなかった。 –

+0

フォームを「Tab」キーを送信すると、フラグUICuesEventArgs.ShowFocusがtrueに設定されているControl.ChangeUICuesイベントが呼び出されることがわかりました。 (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.changeuicues.aspx) このイベントが処理された後、フォーカス矩形が表示されます。誰かが知っている、どのように私はトリガー/このイベントを直接呼び出すことができますか?私はこれを本当に設定できるプロパティを見つけませんでした... – AlexS

答えて

5

私がコメントしたように、これは本当にユーザー設定です。

四角形を表示するのではなく、あなた自身のRadioButtonを継承しようとしてShowFocusCues関数をオーバーライド:

LarsTechが言ったように
Public Class RadioWithFocus 
    Inherits RadioButton 

    Protected Overrides ReadOnly Property ShowFocusCues() As Boolean 
    Get 
     Return True 
    End Get 
    End Property 

End Class 
1

は、初期化フォームの方法、またはどこに該当するの遺伝Control.Focus()を使用してください。次のようなものがあります。

public Form1() { 
    //Other stuff here 
    radiobox1.Focus();// If this is the name of your control 
} 

もう1つの方法は、Form.Activateです。これはおそらくこのコンテキストで使用する方が良いでしょう。

また、ActiveControlが役に立ちます。

+0

私は.Focusメソッドを知っていて、最初に試しました。あなたの.Activateメソッドは良いアイデアでしたが、そのトリックもありませんでした。 : -/ – AlexS

+0

私の編集を参照してください.... – annonymously

0

が、これはユーザー設定です。 Windows 7の場合、ここでこの設定を見つけることができます。 コントロールパネルを開く/アクセスセンターを簡単にする/キーボードを使いやすくする。

「キーボードショートカットとアクセスキーにアンダーライン」というテキストのチェックボックスを探し、それを確認します。

アプリを再実行すると、フォームの最初の読み込み時にフォーカスキーが表示されるようになります。

、Win32の/ C++の場合

0

をお楽しみ親ウィンドウにWM_CHANGEUISTATEメッセージを送信します。

// Enable focus rect and accelerator underline in all controls. 
    ::SendMessage(WM_CHANGEUISTATE, MAKELONG(UIS_CLEAR, UISF_HIDEACCEL | UISF_HIDEFOCUS), 0); 
関連する問題