フォーカスがあるテキストボックスの背景色を変えるコンポーネント by @masaru_b_cl #adcjcs

この記事はC# Advent Calendar 2011 : ATNDへの参加記事です。

昨日は@tt_clownさんのPDFWiki – Wiki 記法で PDF を生成する – Life like a clownでした。

 

さて、大分古い話ですが、こんな記事がありました。

コンポーネント作ろうよ – 菊池 Blog

この記事の最後に次のようにあります。

コントロールの個数分コンポーネントを Control と結びつけるのが面倒なら Control.ControlAdded を捕まえて追加された子供に結ぶコンポーネントをFormにくっつければOKって事ですね。

 

ということでやってみます。

今回は単純にFormに追加された子コントロールだけに限定し、孫コントロールなどは含まないものとします。

 

プロジェクトの作成

まあ、適当に作成します。

image

 

コンポーネントの作成

  1. 新しいクラスを作成します。名前は「BackColorChangeOnFocusProvider」とでもしましょうか。
    image
  2. 作成したクラスにてComponentクラスを継承します。
    public class BackColorChangeOnFocusProvider : Component
    {
    }

  3. Targetプロパティを追加します。
    public class BackColorChangeOnFocusProvider : Component
    {
      private Form _target;

      public Form Target
      {
        get { return _target; }
        set { _target = value; }
      }
    }

  4. Targetプロパティのsetに、_target.ControlAddedイベントハンドラーを設定します。(_targetがnullの時に備えて、nullチェックも入れます。)
    set
    {
      _target = value;
      if (_target == null) return;
      _target.ControlAdded += (sender, e) =>
      {
      };
    }

  5. 4.で追加したControlAddedイベントハンドラーの中で、e.ControlのEnterイベント、Leaveイベントのイベントハンドラーを設定します。
    _target.ControlAdded += (sender, e) =>
    {
      e.Control.Enter += (_, __) =>
      {
        e.Control.BackColor = Color.SkyBlue;
      };
      e.Control.Leave += (_, __) =>
      {
        e.Control.BackColor = SystemColors.Window;
      };
    };

  6. ここでいったんビルドします。

 

コンポーネントを使う

  1. フォームデザイナを開くと、ツールボックスに今作成したコンポーネントが追加されています。
    image
  2. フォームにコンポーネントを貼り付けます。
    image
  3. 貼り付けたコンポーネントのプロパティ「Target」にForm1を設定します。
    image
  4. Form1にテキストボックスを2つ貼り付けます。
    image

 

実行する

では、F5を押して実行してみましょう。

image 

 image

フォーカス位置のテキストボックスの背景色が変わっていることが確認できます。

 

なお、今回作成したプロジェクトはGistに上げてあります。

 

最後に

「今更WinFormsはないだろJK・・・」は受け付けません!

 

次は

@tanaka_733さんです!

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中