フォーカスがあるテキストボックスの背景色を変えるコンポーネント by @masaru_b_cl #adcjcs
この記事はC# Advent Calendar 2011 : ATNDへの参加記事です。
昨日は@tt_clownさんのPDFWiki – Wiki 記法で PDF を生成する – Life like a clownでした。
さて、大分古い話ですが、こんな記事がありました。
この記事の最後に次のようにあります。
コントロールの個数分コンポーネントを Control と結びつけるのが面倒なら Control.ControlAdded を捕まえて追加された子供に結ぶコンポーネントをFormにくっつければOKって事ですね。
ということでやってみます。
今回は単純にFormに追加された子コントロールだけに限定し、孫コントロールなどは含まないものとします。
プロジェクトの作成
まあ、適当に作成します。
コンポーネントの作成
- 新しいクラスを作成します。名前は「BackColorChangeOnFocusProvider」とでもしましょうか。
- 作成したクラスにてComponentクラスを継承します。
public class BackColorChangeOnFocusProvider : Component
{
} - Targetプロパティを追加します。
public class BackColorChangeOnFocusProvider : Component
{
private Form _target;public Form Target
{
get { return _target; }
set { _target = value; }
}
} - Targetプロパティのsetに、_target.ControlAddedイベントハンドラーを設定します。(_targetがnullの時に備えて、nullチェックも入れます。)
set
{
_target = value;
if (_target == null) return;
_target.ControlAdded += (sender, e) =>
{
};
} - 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;
};
}; - ここでいったんビルドします。
コンポーネントを使う
- フォームデザイナを開くと、ツールボックスに今作成したコンポーネントが追加されています。
- フォームにコンポーネントを貼り付けます。
- 貼り付けたコンポーネントのプロパティ「Target」にForm1を設定します。
- Form1にテキストボックスを2つ貼り付けます。
実行する
では、F5を押して実行してみましょう。
フォーカス位置のテキストボックスの背景色が変わっていることが確認できます。
なお、今回作成したプロジェクトはGistに上げてあります。
最後に
「今更WinFormsはないだろJK・・・」は受け付けません!
次は
@tanaka_733さんです!


