5

ボタンをクリックしたときにカーソルをテキストボックスに移動したい。どうやってやるの?Focus()メソッドを試しましたが、機能しませんでした。コードを以下に示します。

CsNIPAddrTextBox.Focus();
CsNIPAddrTextBox.TabIndex = 1;
4

8 に答える 8

8

それが「適切な」TextBox(つまりカスタムではない)の場合は、単に呼び出すだけでFocus()機能するはずです。ただし、読み取り専用の場合はそうではない可能性があります(よくわかりませんが、試したことはありません。読み取り専用ボックスでキャレットを取得できることはわかっています。これは、フォーカスを取得できることを意味します)。そうでなければ、Enabledフォーカスを設定することはできません。

プロパティがtrueであることを確認しCanFocusます。そうでない場合は、コントロールがフォーカスを受け取れない他の理由がある可能性があります。

trueただし、それでもキャレットがコントロールに到達しない場合は、それを受信して​​いることを確認する必要があります。テキストボックスのイベントのイベントハンドラーを追加し、GotFocusブレークポイントを設定して、ヒットすることを明確にします。私の推測では、ブレークポイントがヒットするでしょう。もしそうなら-答えは、ボタンのクリックが発生した直後に、別のプロセスが別のコントロールにフォーカスを設定しているということです。 たとえば、検証イベントハンドラーでこの種のことを行うと、ハンドラーが起動されたときにWindowsフォームパイプラインが既にコントロールを変更しているため、同様の結果が得られます。

また、なぜ設定しているのTabIndex=1ですか?通常TabIndex、設計時に設定され、そのままになります(もちろん、これらが動的に作成されない限り)。これを行う特別な理由がない限り、私はその行を削除します。これが機能する/機能しない理由とは関係ありません-単なる観察です。

于 2012-06-21T09:56:02.393 に答える
5

Edit again:

If you try to select a TextBox in the Click event of a TreeView, it usually fails, because after the Click event the TreeNode will be selected, making your previous Focus() or Select() useless. The workable way is, perhaps, calling them in a Timer.

Timer t = new Timer();
t.Interval = 10;
t.Tick += new EventHandler((s,ev)=>textBox2.Focus());
t.Start();

This is more like a hack though...

于 2012-06-21T09:53:35.127 に答える
2

私が正しく読んだ場合、あなたはマウスカーソルをテキストボックスに移動することについて話しているのですか?-次に、次のようなコードを使用できます。

System.Windows.Forms.Cursor.Position = 
     PointToScreen( 
            new Point( textBox1.Location.X + 5, textBox1.Location.Y + 5) 
     );
于 2012-06-21T13:45:31.253 に答える
2

TextBox.Select メソッドを使用する必要があります

例えば

textbox1.Select(textbox1.Text.Length,0);

Yout テキスト ボックス内のテキストの末尾にカーソルを設定します。

于 2012-06-21T10:27:44.107 に答える