えムナウのプログラミングのページ

えムナウ の とどけもの

 Logo えムナウBlog@AILight
えムナウBlog@Wankuma

目次

利用状況

イメージ ギャラリー

カテゴリ

Links
 

inetaj

MSMVPロゴ
MSMVP Visual C# 2005/01-2007/12

目次

ユーザーコントロール

サンプル8 IPアドレスを入力するユーザーコントロール

まずチュートリアルでユーザーコントロールを作ってみましょう。

Visual Basic および Visual C# の概念
チュートリアル : Visual C# によるユーザー コントロールの作成


大変そうだなって思ったら飛ばしてもいいです。
このページで詳しく作り方を紹介します。

次にユーザーコントロールを設計してみましょう。
たとえば、IPアドレスを入力するユーザーコントロールとします。

IPアドレスを入力するTextBoxを4個配置し、Labelで「.」を3個配置することにします。
IPアドレスを設定・取得できるプロパティが必要です。
IPアドレスの入力形式が正しいかチェックするメソッドも欲しいですね。
IPアドレスに変化があった時知らせてくれるイベントがあるといいかもしれません。

以下のページを参考にしてIPアドレスを入力するユーザーコントロールを作りプロパティ、メソッド、およびイベントを追加しましょう。

Visual Basic および Visual C# の概念
ユーザー コントロールの作成


Visual Basic および Visual C# の概念
カスタム コントロールのプロパティ、メソッド、およびイベント


新規ユーザーコントロールプロジェクトを作成します。


Windowsコントロールライブラリを選んで作成してください。


TextBoxを4個配置し、Labelで「.」を3個配置します。


プロパティ、メソッド、およびイベントを追加してコンパイルします。


public string IpText
{
        get
        {
                return textBox1.Text + "." + textBox2.Text + "." + textBox3.Text + "." + textBox4.Text ;
        }
        set
        {
                string[] split = value.Split(new char[]{'.'}) ;
                if ( split.GetLength(0) >= 1 ) textBox1.Text = split[0] ;
                else textBox1.Text = "" ;
                if ( split.GetLength(0) >= 2 ) textBox2.Text = split[1] ;
                else textBox2.Text = "" ;
                if ( split.GetLength(0) >= 3 ) textBox3.Text = split[2] ;
                else textBox3.Text = "" ;
                if ( split.GetLength(0) >= 4 ) textBox4.Text = split[3] ;
                else textBox4.Text = "" ;
                OnIpTextChanged(EventArgs.Empty);
        }
}

private bool IpTextValidate(string text)
{
        bool validate = false ;
        System.Text.RegularExpressions.Regex ipregex = 
                new System.Text.RegularExpressions.Regex("^[0-9]{1,3}$");
        if ( ipregex.IsMatch( text ) )
        {
                int ipaddress = int.Parse(text) ;
                if ( ipaddress >= 0 && ipaddress <= 255 ) validate = true ;
        }
        return validate ;
}

public bool IpTextValidate()
{
        bool validate = true ;
        if ( !IpTextValidate(textBox1.Text) ) validate = false ;
        if ( !IpTextValidate(textBox2.Text) ) validate = false ;
        if ( !IpTextValidate(textBox3.Text) ) validate = false ;
        if ( !IpTextValidate(textBox4.Text) ) validate = false ;
        return validate ;
}

public delegate void IpTextChangedEventHandler(object sender, EventArgs e);
public event IpTextChangedEventHandler IpTextChanged;
protected virtual void OnIpTextChanged(EventArgs e) 
{
        if (IpTextChanged != null)
                IpTextChanged(this, e);
}

private void textBox_TextChanged(object sender, System.EventArgs e)
{
        IpTextChanged(sender, e) ;
}

テストするためのプロジェクトを作成します。


Windowsアプリケーションを選んで、ソリューションに追加を選択してください。


作成されたFormに先ほどコンパイルしたユーザーコントロールを配置します。


その他テストに必要なパーツも配置します。
IPアドレスの入力形式が正しいかチェックするボタンと結果表示用のLabel
IPアドレスに変化があった時知らせてくれる表示用のLabelと一定時間で消すためのタイマー
IPアドレスを設定するためのテキストボックスとボタン です。


private void buttonCheck_Click(object sender, System.EventArgs e)
{
        if ( userControl11.IpTextValidate() )
        {
                label1.Text = "OK" ;
        }
        else
        {
                label1.Text = "NG" ;
        }
}

private void userControl11_IpTextChanged(object sender, System.EventArgs e)
{
        label2.Text = "Change" ;
        timer1.Enabled = true ;
}

private void timer1_Tick(object sender, System.EventArgs e)
{
        label2.Text = "" ;
        timer1.Enabled = false ;
}

private void buttonSet_Click(object sender, System.EventArgs e)
{
        userControl11.IpText = textBox1.Text ;
}
実行して確認しましょう。
以下にTechEDで説明したパワーポイントと今回のソリューションが圧縮されています。
パワーポイント・ソリューション圧縮ファイル LZH 圧縮ファイル

「えムナウのプログラミングページ」のサンプルもよろしくお願いします、今回説明しなかった属性とタイプコンバータのサンプルもあります。
スプレッドシートコントロールのソースにもユーザーコントロールを作るノウハウがたくさんあります参考にしてください。

以下のページも参考にしてより高度なユーザーコントロールを作りましょう。

.NET Framework 開発者ガイド
デザイン時サポートの拡張


Microsoft .NET Framework SDK クイック スタート チュートリアル
Windows フォーム コントロールの作成