テキストボックスの選択状態をクリックで解除するには?

解決


トミー  2004-12-08 19:21:53  No: 87261  IP: [192.*.*.*]

いつも参考にさせていただいてます。

VisualStudio2003でVB.NETの開発を進めているのですが、TextBoxについてわからない部分がでてきました。よろしければご教授ください。

以前のVBでは、TextBoxをクリックしたとき、
  
  全ての文字列を選択状態  →  次のワンクリックで選択状態を解除

の動きができたと思いますが、.NETでは私が試した限りどのイベントを利用してもこれが実現できないでいます。

MouseDownイベントの中で、
  ①文字列が選択されている場合
  ②選択されていない場合
でわけて対応する、というのも考えたのですが・・。

もし良い方法をご存知のかたがいましたら、よろしくお願いします。。

編集 削除
java.lang.Nullpo  2004-12-08 19:58:47  No: 87262  IP: [192.*.*.*]

そもそも、VB6での「マウスクリックでも全選択になる」方が、
Windowsとしての仕様と違ってたりしますが。
(実際、Windowsでの既成のTextBoxではそういう動きをする)
VB.NETになって、それが解消されて喜んでいる私と逆ですね(w

確認ですが、

> 以前のVBでは、TextBoxをクリックしたとき、
> 全ての文字列を選択状態  →  次のワンクリックで選択状態を解除

これは、その TextBox 以外にフォーカスがある状態で、ですよね?
また、この動きは GotFocus 時に全選択状態になるように実装されている時のお話ですよね?

編集 削除
トミー  2004-12-08 21:37:25  No: 87263  IP: [192.*.*.*]

お返事ありがとうございます。

すいません。。。説明が足りませんでした。

おっしゃるとおり、そのTextbox以外にフォーカスがある状態で、
GotFocusイベント内には選択される機能が実装されています。

以前のVBで作成したコーディングはこのような感じです。

textbox.SelStart = 0
textbox.SelLength = Len(textbox.Text)

これがGotFocus内に記述されていました。

今回の.NETでは同じようにGotFocus(Enter)イベント内に

Textbox.SelectAll()

と書いているのですが、クリックしても
選択状態になりません。

Textbox.Select(0, Textbox.TextLength)

という記述も試してみましたがダメでした。。。

Clickイベント内に上のコードを記述した際は
クリック時に選択状態となるのですが、
もういちどクリックしても選択がとけません。。。
(Clickイベントにかいてるのであたりまえですが。。。)

なにか他によい方法はありますでしょうか?

編集 削除
java.lang.Nullpo  2004-12-09 10:13:21  No: 87264  IP: [192.*.*.*]

思ったとおりでしたか。

もしどうしてもやるというのなら、面倒なことになります。

まず、Enter イベントで SelectAll() メソッドを書いているかと思います。
これはそのままで良いです。

それで、問題は マウス選択時 になるのですが、
MouseDown イベントである条件を加える必要があります。
それが面倒なんですよね・・・(カスタムコントロール化しても苦労するでしょう)

MouseDown 前にフォーカスを取得していたコントロールが自分自身でないこと確認する必要があります。
自分自身でないなら、SelectAll() メソッドを実行という形になるでしょう。

編集 削除
トミー  2004-12-09 18:18:27  No: 87265  IP: [192.*.*.*]

おしゃったことをヒントにどうにか解決することができました。
java.lang.Nullpoさんありがとうございました!

編集 削除