この記事でわかる事
TextBoxの枠線の色を変える方法
こんな感じでTextBoxの枠線色かえちゃいます!
※この例では赤色に変えています。
TextBoxの枠線の色を変更する方法|カスタムコントロールを作成する
TextBoxのプロパティからは変更できない|そう簡単にはいかない…
これができればいいんですが、残念ながらできません。
なので、ちょっと面倒ですがカスタムコントロールを作ってあげる必要があります。
カスタムコントロールを作成する
Visual Studioの「ソリューションエクスプローラー」→「プロジェクト」→「右クリック:追加」→「新しい項目」をクリックします。
するとこんな画面がでます。
この中から、「カスタムコントロール」を選択し、ファイル名を入力します。
※わたしは「TextBoxEx」にしました。
そうしたら次はソースコードを書いていきます。
TextBoxのカスタムコントロール|ソースコード実装内容
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | public partial class TextBoxEx : TextBox { public TextBoxEx() { InitializeComponent(); } /// <summary> /// 枠線。 /// </summary> private Color _borderColor; /// <summary> /// 枠線 /// </summary> public Color BorderColor { get { return this._borderColor; } set { this._borderColor = value; } } /// <summary> /// OnPaint イベント。 /// </summary> /// <param name="pe">イベントデータ。</param> protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); } /// <summary> /// Windowsメッセージを処理する。 /// </summary> /// <param name="m">処理するメッセージ。</param> protected override void WndProc(ref Message m) { if (m.Msg == 0x85) //WM_NCPAINT { Graphics g = this.Parent.CreateGraphics(); Rectangle rectangle = new Rectangle(this.Location, this.Size); rectangle.Inflate(1, 1); ControlPaint.DrawBorder(g, rectangle, this._borderColor, ButtonBorderStyle.Solid); } base.WndProc(ref m); } } |
ポイントはここ!
protected override void WndProc(ref Message m)
WndProcの中で枠線を描画するようにしています。
※TextBoxはOnPaintでの描画が走らないのでWndProcで処理しています。
まずは、「if (m.Msg == 0x85)」で処理するメッセージをチェック。
そして、以下のコードで四角形を作成。
1 2 | Rectangle rectangle = new Rectangle(this.Location, this.Size); rectangle.Inflate(1, 1); |
Inflateで1だけ拡大しています。これをやらないと見た目なにも描画されないのでお忘れなく。
そして、以下で描画してあげます。
1 | ControlPaint.DrawBorder(g, rectangle, this._borderColor, ButtonBorderStyle.Solid); |
一番最後の引数を「 ButtonBorderStyle.Dotted」にすると、ドット(点線)の枠線が描画できたりもします。
目的に応じて変更してみてください。
プロパティでBorderStyle:Noneにすることを忘れずに
多分デフォルトだと「FixedSingle」になっていると思います。
「None」に変更してあげてください。
そうしないと、黒い枠線が描画され、その上に色枠線が描画され、ちょっと変な感じになります。
枠線色はプロパティ、またはソースコード上から変更してあげよう!
このように、プロパティに「BorderColor」というのが存在しているはずです。
ここで枠線の色を設定することが可能です。
または、ソースコード上から「BorderColor」に好きな色を設定してあげるでもOKです。
まとめ|TextBoxの枠線の色を変更したい場合はカスタムコントロールで対応
- TextBoxの枠線の色は通常は変更不可
- 変更したい場合は、カスタムコントロールを作成しよう