Control.Select()
WinForms では、特定のコントロールにフォーカスを設定するために、私はいつも呼び出しを 巻き上げてControl.Focus()
動作させるようです。
違いは何ですか?これは正しいアプローチですか?
Control.Select()
WinForms では、特定のコントロールにフォーカスを設定するために、私はいつも呼び出しを 巻き上げてControl.Focus()
動作させるようです。
違いは何ですか?これは正しいアプローチですか?
Focus()は、実際にフォーカスを設定する低レベルの関数です。
Select()は、より高いレベルのメソッドです。コンテナコントロールが見つかるまで、最初にコントロールの親階層を上向きに繰り返し検索します。次に、そのコンテナのActiveControlプロパティを(呼び出されたコントロールに)設定します。ただし、これらのメソッドのロジックは単純ではなく、UserControlコンテナーには特別な処理があります。
Focus は、主にカスタム コントロールの作成者を対象とした低レベルのメソッドです。代わりに、アプリケーション プログラマは子コントロールに対して Select メソッドまたは ActiveControl プロパティを使用するか、フォームに対して Activate メソッドを使用する必要があります。
http://msdn.microsoft.com/en-us/library/system.windows.forms.control.focus.aspx
それらの違いの例として、Forms アプリを開いたときにコントロールをデフォルトのフォーカスに設定しようとしている場合、InitializeComponent() の後にコンストラクターで呼び出されたときに Select() のみが機能します。Focus() はしません。
個人的な経験から、Windows ComboBox を継承するユーザー コントロールを作成しました。イベントをオーバーライドするコードを作成する必要がOnEnter
あり、そこに次のようなステートメントがありました
If Me.Focused Then ... Else ...
しかし、残念ながら、予期しない結果が返されました。MyCustomerComboControl.Select
(Load、Shown、または Activated イベントのいずれかで) 呼び出した場合、メソッドが呼び出されましOnEnter
たが、フォーカスがあった (つまり、Focused が False) 登録に失敗しましたが、Focus を呼び出した場合は機能しました。さらにSelect
、フォームが開いている場合は機能しました。つまり、別のコントロールを選択してから元のコントロールを再選択した場合、すべて問題ありませんでした。したがって、私のシナリオ以外の状況Select
では、上記のように使用してください。