web-dev-qa-db-ja.com

Windowsフォームのコントロールにフォーカスを強制する方法

Windowsフォームアプリケーションで「検索」テキストボックスコントロールに焦点を当てようとしています。このテキストボックスは、Windowsフォーム内のパネル内にあるユーザーコントロール内にあります(重要な場合)。私は見つけることができる3つの方法を試しました:

// 1
this.ActiveControl = myTextBox;

// 2
myTextBox.Focus();

// 3
myTextBox.Select();

どちらも動作しないようです。たとえば、最初のコントロールを試すと、アクティブコントロールは実際にはmyTextBoxに設定されますが、キーボードで何かを書き込もうとすると、textboxはそれを受け入れず、フォーカスを得るためにまずtextbox内をクリックする必要があります。これはすべての方法で同じです。何か不足していますか?

13
Wolf

はい、ようやく答えが見つかりました:

私が言ったように、私のテキストボックスはフォーム内のパネル内のユーザーコントロール内にあります。ユーザーコントロールが必要な場合は、パネルに追加します。テキストボックスに焦点を合わせるには、最初にユーザーコントロールに焦点を当てる必要があります。

panel.Controls.Add(myUserControl);
myUserControl.Focus();

そして私のユーザーコントロールで:

myTextBox.Select();

MyTextBox.Focus()を使用した場合、機能しないことに注意してください(理由はわかりません)。また、myUserControl.Focus()の代わりにmyUserControl.Select()を使用した場合も機能しません。

これが機能する唯一の組み合わせのようです。

21
Wolf

次のロジック手順を実行して、コントロールをフォーカスに設定できます。

your_control.Select();
your_control.Focus();

楽しい! :)

0