C# 入門 & 実践 / C sharp

5-3. TextBox テキストボックス / MaskedTextBox


さてさっそくtextboxをフォームに貼り付けたら

        private void button1_Click(object sender, EventArgs e)
        {
            // テキストボックスの値をラベルに反映
            label1.Text = textBox1.Text;
        }

これだけでOK



クリックするとテキストボックスの内容がラベルに反映されますね!

クリックしないで、入力時にそのまま反映させてみます。

テキストボックスのプロパティのイベント一覧にある
「 TextChanged 」をダブルクリックしてみます。
すると↓新しいメソッドが自動で生成されるので中にこう書くと

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            // テキストボックスの値をラベルに反映
            label1.Text = textBox1.Text;
        }

テキストボックスに入力する度にラベルに反映されますね!

7桁の郵便番号入力専用のテキストボックスを作ってみたいと思います。
textbox を二つ用意して
プロパティのmaxLengthを それぞれ3,4にします。

入力された文字が数字でないとき消しちゃう。

それぞれのプロパティの TabIndex を 1 ,2 ,3 と順番にしておく
maxLength になったら次へフォーカスを移す。
こんな書き方でいいのか・・・?

エラーのときメッセージボックスを出してみる!

Form1.cs
        private void check_TextChanged(object sender, EventArgs e)
        {
            // 両方チェックできるように、オブジェクトは指定せずにキャストして使う。 
            TextBox tb = (TextBox)sender;
            
            // 数字以外があるかちぇっく
            Regex reg = new Regex(@"[^0-9]");
            Match m = reg.Match(tb.Text);
            //
            if (m.Success)
            {
                // message box を出す!
                MessageBox.Show("半角数字以外入力できません!");
                // 数字以外があったら, 消しちゃう。
                tb.Text = reg.Replace(tb.Text, "");
            }

            if (tb.MaxLength == tb.Text.Length)
            {
                // 最大文字列まで行ったらフォーカスを移す
                int i = tb.TabIndex + 1;
                foreach ( Control c in Controls)
                {
                    if (c.TabIndex == i)
                    {
                        c.Focus();
                    }
                }
            }
        }


両方のテキストボックスの TextChanged に実装する。

Form1.Designer.cs
            this.textBox1.TextChanged += new System.EventHandler(this.check_TextChanged);
            this.textBox2.TextChanged += new System.EventHandler(this.check_TextChanged);

最後に check ボタンをクリックするとメッセージボックスで結果を表示する。

        private void button1_Click(object sender, EventArgs e)
        {
            bool check = false;
            string msg = "System Message \n";
            // テキストボックスの値をラベルに反映
            if (textBox1.Text.Length < 3)
            {
                msg += "郵便番号上 3 桁が不正です>。<;\n";
                check = true;
            }
            if (textBox2.Text.Length < 4)
            {
                msg += "郵便番号下 4 桁が不正です>。<;\n";
                check = true;
            }
            if (check)
            {
                // Error
                MessageBox.Show(msg, "エラーです!");
            }
            else
            {
                // OK
                MessageBox.Show( textBox1.Text + " - " +  textBox2.Text , "郵便番号");
            }
        }







雰囲気出てきましたね^-^。

MaskedTextBox


これを使うと入力制限付のテキストボックスを作ることが出来ます!
.Net Framework 2.0 から追加されたようですね

MaskedTextBoxをフォームに貼り付けて
プロパティの[ Mask ]を選択すると
このような画面が出てきます!



郵便番号だと
マスク [ 000-0000 ]
プレビュー [ ___-____ ]
となっていますね!

これしか入力できなくなります!




5-2. HelloWorld - Button - « 5. Windows アプリケーション » 5-4. CheckBox / CheckedListBox - チェックボックス -


C# 入門 & 実践 / C sharp