C#を始めよう|テキストボックスやラベルの枠線をカスタマイズ

C#のフォームのデザインしているとテキストボックスやラベルの枠線の色や線種を変えたくなる時が有ります。

しかし、対応可能なプロパティが無いんです。

ラベルコントロールにはBoderStyle、設定できる内容が「None」、「FixedSingle」、「Fixed3D」の3種類で色も線種も変更できません。
テキストボックスも同様です。

そんな時のために、ユーザーコントロールってのを作ることで線色や線種を変更可能なプロパティを持ったコントロールを作ることができます。

ここでは、ラベルのユーザーコントロールを例にしています。

ユーザーコントロールを作る

早速、Visual Studioを使ってユーザーコントロールを作ります。

ソリューションエクスプローラーのソルーション名(プロジェクトの下)で右クリック、サブメニューが表示されるので「追加」にマウスカーソルを乗せて「ユーザーコントロール(Windows フォーム)」をクリック、更にコントロールの種類を選択できるメニューが表示されるので「ユーザーコントロール(Windows フォーム)」を選びます。

ここで名前を付けます。今回はラベルのユーザーコントロールを付けるので名前は「MyLabel.cs」にして、追加をクリックです。

ソルーションエクスプローラーに「MyLabel」が表示されます。

このままでは思いは叶わないのでコードをいじります。

先程、作った「MyLabel」のコードを表示します。

ユーザーコントロールのソース

いきなり完成したソースコードです。

using System.Drawing;
using System.Drawing.Drawing2D;
using System.Windows.Forms;

namespace xxxxnamenamespace
{
    public partial class MyLabel : Label    // ラベルを継承
    {
        public MyLabel()
        {
            InitializeComponent();
        }

        private Color       _BorderColor    =   Color.Black;      // プロパティの型と初期値
        private DashStyle   _DashStyle      =   DashStyle.Solid;  // プロパティの型と初期値

        public Color BorderColor  // 線色プロパティ
        {
            get
            {
                return  this._BorderColor;
            }
            set
            {
                this._BorderColor   =   value;
            }
        }
        public  DashStyle   DashStyle  // 線種プロパティ
        {
            get
            {
                return  this._DashStyle;
            }
            set
            {
                this._DashStyle   =   value;
            }
        }
        protected override void OnPaint(PaintEventArgs e)  // OnPaintをオバーライド
        {
            base.OnPaint(e);
            this.AutoSize       =   false;
            Pen  pen =   new Pen(_BorderColor,1);
            pen.DashStyle   =   this._DashStyle;
            e.Graphics.DrawRectangle(pen, 0, 0, this.Width - 1, this.Height - 1);
            pen.Dispose();
        }
    }
}

黄色マーカーがポイントです。

これで、BorderColor(線色)プロパティとDashStyle(線種)プロパティを持つラベルコントロールができました。

完成したユーザーコントロールをフォームに設置

フォームデザイナーのツールボックスからコントロールを選んでフォームに設置するのですが、このままではルールボックスに作成したラベルのユーザーコントロール「MyLabel」が表示されません。

リビルドして初めてルールボックスに「MyLabel」が表示されます。

フォームにMyLabelを設置します。

MyLabelプロパティを確認して下さい。

BorderColorプロパティとDashStyleプロパティが追加されています。

このプロパティを変更して枠線を赤色にしたり点線にすることが可能になりました。
勿論、見て分かるようにLabelプロパティを継承しているので他プロパティはLabelプロパティと同様です。

例はラベルプロパティのユーザーコントロールを作りましたが、テキストボックスも同様に出来ます。
テキストボックスを継承するだけです。

必要であれば是非、試して下さい。

コメント