DOBON.NET DOBON.NETプログラミング掲示板過去ログ

テキストボックスを全選択

環境/言語:[C#,VisualStudio2005,.NET Framework2.0]
分類:[.NET]

C#で画面にテキストボックスを二つ(textA,textB)配置し、
テキストボックスを選択した時に常に全選択にしたいのですが、
思った動きになりません。
テキストボックス両方ともにフォーカスのEnterのイベントを作成し、
そのイベントでは、
textAに、
this.textA.SelectAll();
textBにも、
this.textB.SelectAll();
と記述しました。
しかし、タブ移動でAからBに移動した時にイベントは確かに動いているのですが、
SelectAllが反応しません。
BからAでもです。
これは何故なのでしょうか?
一応、
this.textA.Focus();
this.textA.SelectAll();
上記の形でFocusを追加すると、SelectAllが反応するようになりました。
これは何故なのでしょうか?
これで思った動きになるかと思ったのですが、
マウスでAをクリックした時は、
これも確かにイベントは動くのですが、
SelectAllが反応しません。
これは何故なのでしょうか?
似たような質問だったので、3つの質問をまとめて書かして頂きました。
分かる方がいらっしゃいましたら、アドバイスよろしくお願いします。
普通に実装していればそのようなことにはならないハズなので、一度新規のプロジェクトからトライしてみてください。
どうしてもできない場合は再現できるミニマム コードの提示をお願いします。
じゃんぬねっとさんアドバイスありがとうございます。
確かにプロジェクトを新規から作成し、テキストボックスを2つ張れば、
Focusメソッドを記述しなくてもうまくいきました。
しかし、最後の3つ目の質問でマウスでクリックした時はやはり全選択になりません。
デバッグで動かすと確かに全選択のメソッドは動いているみたいなのですが・・・
一応ソースです。
-------------------
private void textBox1_Enter(object sender, EventArgs e)
{
this.textBox1.SelectAll();
}

private void textBox2_Enter(object sender, EventArgs e)
{
this.textBox2.SelectAll();
}
-------------------
テキストボックスを張ってイベントを記述しただけなので、ソースはこれだけです。
よろしくお願いします。
■No20982に返信(亜紀さんの記事)
> しかし、最後の3つ目の質問でマウスでクリックした時はやはり全選択になりません。

これは正しい動きであり、かつ望ましい動きです。
Windows ではマウスクリックは全選択にならないのが標準仕様みたいですし。
どうしてもやりたい場合は、MouseDown 発生後になんとかする必要がありますね。
たぶん、インターネットエクスプローラのURL欄のように、最初にクリックした
ら全選択で、次のクリックではキャレットが表示されるようになった方がいいです
よね。そうなると、最初にクリックされたかどうかを判断しなければならなくなります。
泥臭いですが、以下のような感じでしょうか?(コードテストしてません)


string preFocusNmn = string.Empty;

//テキストボックス内の文字列を全選択状態にする。(Clickイベントより呼ばれる)
private void TextBoxTextAllSelect(object sender, System.EventArgs e)
{
  if (preFocusNmn != ((TextBox)sender).Name) 
  {
    ((TextBox)sender).SelectAll();
    preFocusNmn = ((TextBox)sender).Name;
  }
}

//テキストボックス内の文字列を全選択状態にするかどうかを判断するため。(Leaveイベントより呼ばれる)
private void Clear_preFocusNmn(object sender, System.EventArgs e)
{
  preFocusNmn = "";    
}
> private void Clear_preFocusNmn(object sender, System.EventArgs e)
> {
>   preFocusNmn = "";
> }

あっ、preFocusNmn = string.Empty; っていうことで。

#削除キーは一応、いれとかなきゃね。(^^;
まあ、アドレス欄は TextBox ではないのですけどね。
これまた Windows 標準の動きです。
trapemiyaさん、じゃんぬねっとさんありがとうございました。
trapemiyaさんはかなり色々と書いていただき、参考になりました。
一度やってみます。
今は単純に「MouseClick」のイベントで対応しました。
みなさんありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板