【やさしいC#】lesson7.3 ボタン

C#

ボタンの種類を知る

ボタン(Button)について、さらにくわしく学ぶことにしましょう。ボタンには、いろいろな種類があります。

種類説明画像
ボタン(Button)通常のボタン各実行画面を参照
チェックボックス(CheckBox)「はい」または「いいえ」の選択をするときに使うボタン各実行画面を参照
ラジオボタン(RadioButton)複数項目から1つだけを選択するときに使うボタン各実行画面を参照
ボタンの種類

このうち、これまでは通常のボタン(Button)を使ってきたのです。
そこでまず、普通のボタンを復習するために、次のコードを入力してみましょう。

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

namespace lesson7
{
    class sample5
    {
        static Form fm;
        static Label lb;
        static Button bt;
        public static void Main()
        {
            fm = new Form();
            fm.Text = "lesson7 Button";
            fm.Width = 200; fm.Height = 200;

            lb = new Label();
            lb.Text = "いらっしゃいませ";
            lb.Dock = DockStyle.Top;

            bt = new Button();
            bt.Text = "購入";
            bt.Dock = DockStyle.Bottom;

            bt.Click += new EventHandler(bt_Click);

            lb.Parent = fm;
            bt.Parent = fm;

            Application.Run(fm);
        }
        public static void bt_Click(Object sender, EventArgs e)
        {
            lb.Text = "ご購入ありがとうございました。";
            bt.Enabled = false; //ボタンを無効に設定します
        }
    }
}

→ 

ここでは、ボタンを無効にして使用できなくするという設定をしています。ボタンに限らず、コントロールでは、ユーザーが誤った操作をしないように、コントロールを無効に設定することができます。おぼえておくと便利でしょう。

クラス説明
System.Windows.Forms.Buttonクラス
Button()コンストラクタボタンを作成する
System.Windows.Forms.Controlクラス
Enabledプロパティ有効無効を設定・取得する

チェックボックスの仕組みを知る

今度は違う種類のボタンを紹介しましょう。まず最初に、チェックボックス(CheckBox)を紹介します。チェックボックスは、ある項目に対して、「はい」または「いいえ」の答えを入力するためのボタンです。

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

namespace lesson7
{
    class sample6 : Form
    {
        private Label lb;
        private CheckBox cb1,cb2;
        private FlowLayoutPanel flp;
        static void Main(string[] args)
        {
            Application.Run(new sample6());
        }
        public sample6()
        {
            this.Text = "lesson7";
            this.Width = 300; this.Height = 200;

            lb= new Label();
            lb.Text = "いらっしゃいませ";
            lb.Dock = DockStyle.Top;

            cb1 = new CheckBox();
            cb2 = new CheckBox();

            cb1.Text ="車";
            cb2.Text = "トラック";

            flp = new FlowLayoutPanel();
            flp.Dock = DockStyle.Bottom;

            cb1.Parent = flp;
            cb2.Parent = flp;

            lb.Parent = this;
            flp.Parent = this;

            cb1.CheckedChanged += new EventHandler(cb_CheckChanged);
            cb2.CheckedChanged += new EventHandler(cb_CheckChanged);
        }
        public void cb_CheckChanged(Object sender, EventArgs e)
        {
            CheckBox tmp = (CheckBox)sender;
            if (tmp.Checked == true)
            {
                lb.Text = tmp.Text + "を選びました";
            }
            else if (tmp.Checked == false)
            {
                lb.Text = tmp.Text + "をやめました";
            }
        }
    }
}

チェックマークをつけたとき・はずしたときにラベルのテキストを変更する処理を行うのです。

クラス説明
System.Windows.Forms.CheckBoxクラス
CheckBox()コンストラクタ指定したテキストをもつチェックボックスを作成する
Checkedプロパティチェックを設定・取得する
CheckedChangedイベントチェックが変更されるイベント
System.Windows.Forms.ButtonBaseクラス
Textプロパティボタンのテキストを返す

キャスト行う

  なお、ここではチェックボックスを判別するためにイベントハンドラ内で、引数として渡されたソースをチェックボックス型に変更しています。

public void cb_CheckChanged(Object sender, EventArgs e)
{
CheckBox tmp = (CheckBox)sender;
……
}

  senderの型は「Object」となっています。Objectはコントロールをやウィンドウを表すクラスの基本クラスです。基本クラスのオブジェクトとして渡されたソースを、具体的なコントロールとして扱うためには、型変換(キャスト)と呼ばれる処理を行う必要があります。
  キャストをするには、()内に変換先の型を示します。ここではCheckBoxクラスに変換すると言う処理になります。
  このように基本クラスの型を派生クラスの型とする場合などに型変換を行うことがあります。型変更を行える場合は限られてます。例えば次のような場合にキャストを行うことが可能です。

  • 基本クラスを派生クラスに変換する
  • 数値型から別の数値型に変換する

ただし、型変換を行うと、新しい型によって表現できない情報を失われる場合もあります。

ラジオボタンの仕組みを知る

  ラジオボタン(RadioButton)を学ぶことにしましょう。ラジオボタンは複数の選択肢の中から、1つの項目を選ぶためのコンポーネントです。1つを選ぶと、他の項目の選択が自動的に外されます。
  ラジオボタンでは、複数の選択肢をグループ化するために、グループボックス(GroupBox)と言うコンポーネントを合わせて使います。早速コードを入力してみることにしましょう

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

namespace lesson7
{
    class sample7 : Form
    {
        private Label lb;
        private RadioButton rb1,rb2;
        private GroupBox gbx;
        static void Main(string[] args)
        {
            Application.Run(new sample7());
        }
        public sample7()
        {
            this.Text = "lesson7";
            this.Width = 300; this.Height = 200;

            lb= new Label();
            lb.Text = "いらっしゃいませ";
            lb.Dock = DockStyle.Top;

            rb1 = new RadioButton();
            rb2 = new RadioButton();

            rb1.Text ="車";
            rb2.Text = "トラック";
            rb1.Checked = true;

            rb1.Dock = DockStyle.Left;
            rb2.Dock = DockStyle.Right;

            gbx = new GroupBox();
            gbx.Text = "種類"; //グループボックスを作成します
            gbx.Dock = DockStyle.Bottom; //グループボックスにラジオボタンを追加します

            rb1.Parent = gbx;
            rb2.Parent = gbx;

            lb.Parent = this;
            gbx.Parent = this;

            rb1.Click += new EventHandler(rb_Click);
            rb2.Click += new EventHandler(rb_Click);
        }
        public void rb_Click(Object sender, EventArgs e)
        {
            RadioButton tmp = (RadioButton)sender;
            lb.Text = tmp.Text + "を選びました";
        }
    }
}

→←

  ここでは、「トラック」項目にチェックをすると、同じグループ内の「車」項目のチェックが解除されます。このように複数のラジオボタンを1まとめのグループにするために、ラジオボタンをグループボックスに追加すると言う処理をしています。それ以外は普通のボタンを扱う場合と同じです。

クラス説明
System.Windows.Forms.RadioButtonクラス
RadioButton()コンストラクタラジオボタンを作成する
System.Windows.Forms.GroupBoxクラス
GroupBox()コンストラクタグループボックスを作成します

Object

イベントハンドラの引数として使っているObjectは、C#ではobjectと表記することもできます。本書ではObjectの表記を使っています。

コメント

タイトルとURLをコピーしました