none
TextBox の反転表示について RRS feed

  • 質問

  • VB2008を使用しています。
    TextBox1 と TextBox2 と TextBox3 があったとして、
    各TextBoxはそのFormを表示した時には英数字が入っているとします。
    TextBox1はFocusされているので、反転表示になっているのですが、
    TabキーでTextBox2 や TextBox3 に飛ばした時、反転表示にならず、
    そのTextBoxの最後の文字にカーソルがいってしまいます。
    反転表示なっていればBackspaceなどで1文字づつ消さずに、
    Backspace1回で、又は、上書き出来る為、反転表示したいのです。
    Tabキーで飛ばした場合に反転表示にする方法を教えて頂きたく、宜しくお願い致します。
    2009年10月3日 2:32

回答

  • 実際にはTextBox が多数あるFormになっていますが、
    個々にTextBoxのイベントの発生時にソースを記載しなくてはいけなくなると言う事ですね。
    そういうことです。
    でも、そうしなくていい方法もあります。
    ユーザーコントロールはご存知でしょうか。
    テキストボックスを継承したユーザーコントロールを作成し、
    自動反転などの動作を書いておきます。

    フォームには、.NET が用意してくれているテキストボックスではなく
    自作したユーザーコントロールを置きます。
    テキストボックスを継承しているので
    もともとのテキストボックスの動作もしてくれますし
    自動反転など、自分で書いたコードも動作してくれます。

    後からやりたいことが変わったり、
    増えた場合も、比較的簡単に対応できます。
    お解りでしたら1つ質問ですが、Focus した分は、自動で、反転表示になってくれるのは、何故でしょうか?
    すでに上の文を読まれてお気付きかもしれませんが、
    .NET が用意してくれているテキストボックスに
    Focus 時の反転処理が書かれているだけだと思います。
    なにか特別なことが起きているわけでは無いと思いまよ。

    (↑中身を確認したわけではないので、
    話半分に聞いておいてくださいね^^;)

    追記:上で「ユーザーコントロール」と書いてしまいましたが
    少なくとも Visual Studio、.NET では
    「カスタムコントロール」や「継承コントロール」といった
    呼び方が適切なようです。
    「ユーザーコントロール」だと↓の例のようなコントロールを指すようです。
    10 行でズバリ !! Windows フォーム向けユーザー コントロールの作成 (VB)
    • 編集済み anningo 2009年10月5日 10:33 URLタイトル追加
    • 回答としてマーク fuji-tochigi 2009年10月6日 7:29
    2009年10月5日 8:56

すべての返信

  • TextBox.SelectAll()

    どのイベントに書くか迷われたら↓のページが参考になるかと思います。
    TextBoxの文字列選択について
    http://dobon.net/vb/bbs/log3-8/5058.html
    (http://dobon.net/ DOBON.NET トップページ)

    Tabキー押下とマウスクリックでの動作の違いなど
    考慮点がいくつかあるようです。
    • 編集済み anningo 2009年10月3日 3:04 文訂正
    2009年10月3日 3:00
  • タブキーだけではなく、要件からすればクリック時にも全選択にするのが普通だと思います。しかしもう一度クリックすると全選択が解除される必要があります。なぜならその文字列に挿入したい場合があると思うからです。私が実現した例では、前回フォーカスがあったコントロールを覚えておき、クリックされた際にそれが当該のテキストボックスと違えばSelectAllメソッドを実行し、そうでなければ何もしないということをした経験があります。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/
    2009年10月3日 13:08
    モデレータ
  • ご返答有難う御座いました。
    実際にはTextBox が多数あるFormになっていますが、
    個々にTextBoxのイベントの発生時にソースを記載しなくてはいけなくなると言う事ですね。
    お解りでしたら1つ質問ですが、Focus した分は、自動で、反転表示になってくれるのは、何故でしょうか?

    2009年10月5日 8:19
  • ご返答有難う御座いました。
    おっしゃる通り再度クリックした場合は反転表示が解除されなくてはいけないと思います。

    2009年10月5日 8:22
  • 実際にはTextBox が多数あるFormになっていますが、
    個々にTextBoxのイベントの発生時にソースを記載しなくてはいけなくなると言う事ですね。
    そういうことです。
    でも、そうしなくていい方法もあります。
    ユーザーコントロールはご存知でしょうか。
    テキストボックスを継承したユーザーコントロールを作成し、
    自動反転などの動作を書いておきます。

    フォームには、.NET が用意してくれているテキストボックスではなく
    自作したユーザーコントロールを置きます。
    テキストボックスを継承しているので
    もともとのテキストボックスの動作もしてくれますし
    自動反転など、自分で書いたコードも動作してくれます。

    後からやりたいことが変わったり、
    増えた場合も、比較的簡単に対応できます。
    お解りでしたら1つ質問ですが、Focus した分は、自動で、反転表示になってくれるのは、何故でしょうか?
    すでに上の文を読まれてお気付きかもしれませんが、
    .NET が用意してくれているテキストボックスに
    Focus 時の反転処理が書かれているだけだと思います。
    なにか特別なことが起きているわけでは無いと思いまよ。

    (↑中身を確認したわけではないので、
    話半分に聞いておいてくださいね^^;)

    追記:上で「ユーザーコントロール」と書いてしまいましたが
    少なくとも Visual Studio、.NET では
    「カスタムコントロール」や「継承コントロール」といった
    呼び方が適切なようです。
    「ユーザーコントロール」だと↓の例のようなコントロールを指すようです。
    10 行でズバリ !! Windows フォーム向けユーザー コントロールの作成 (VB)
    • 編集済み anningo 2009年10月5日 10:33 URLタイトル追加
    • 回答としてマーク fuji-tochigi 2009年10月6日 7:29
    2009年10月5日 8:56
  • ユーザーコントロールは初体験ですが、チャレンジしてみます。
    解りやすく説明して頂き、本当に有難う御座いました。
    2009年10月6日 7:29