libro
www.tuyano.com
初心者のためのC#プログラミング入門

さまざまなコントロールの利用 (3/4)

作成:2013-08-31 09:29
更新:2013-08-31 09:29

■ComboBoxについて

いくつかある項目からどれかを選ぶ場合、ラジオボタン以外にも「コンボボックス」というUIも使われます。コンボボックスは、用意されている項目をプルダウンメニューのように表示して選択する他、直接テキストを書いて入力することもできるUIですね。これは「ComboBox」というクラスとして用意されています。

このComboBoxも、選択された項目に関するプロパティや、項目の選択に関するイベントなどが用意されています。が、これもRadioButtonのように、いくつかの似たようなものが用意されているので注意が必要でしょう。

●表示項目のプロパティ
Items――表示する項目をまとめて管理するコレクションのプロパティです。Controlsなどと同様、Addメソッドで項目を追加できます。

●選択項目に関するプロパティ
SelectedIndex――選択されている項目のインデックス番号
SelectedItem――選択されている項目(Objectインスタンス)
SelectedText――設定されているテキスト
SelectedValue――選択されている値
Text――コントロールに表示されているテキスト

●選択に関するイベント
SelectedIndexChanged――SelectedIndexが変わったとき
SelectedValueChanged――SelectedValueが変わったとき
TextChanged――Textが変わったとき

ComboBoxがややこしいのは、その入力が「リスト項目の選択」と「テキストの記入」の2通りあるからです。一般にComboBoxは複数の項目を用意しておき、それらから1つを選ぶとそれが選択されます。こうした場合、選択された項目はSelectedIndexSelectedTextで取り出すことができます。またSelectedIndexChangedなどでイベント処理をすればよいでしょう。

しかし、直接テキストを書いて入力された場合、これらは役に立ちません。このとき、入力されたテキストは、Textで取り出すことになります。またテキストの入力時のイベントはTextChangedで調べることになるでしょう。

更に、項目を管理するのに「ValueMember」というプロパティを利用する方法もあります。これはListControlというクラスを継承したコントロールで使われるもので、ちょっとややこしいので今回は省略します。が、このValueMemberを利用する場合もまた別の形でイベント処理やプロパティの取得を行うことになります。

このように、「どうやって項目を組み込み利用するか」によって、最適なプロパティやイベントというのがあるため、ComboBoxを使いこなすのは意外に面倒だったりします。まずは基本として、「項目をいくつか用意して選択させる」「テキストを直接入力する」というやり方から理解していくのが良いでしょう。

下に簡単なサンプルを挙げておきます。ここでは3つの項目をItemsに組み込み、それらを選択したり、直接テキストを記入したときにComboBoxの値を表示するようにしています。

※プログラムリストが表示されない場合

AddBlockなどの広告ブロックツールがONになっていると、プログラムリスト等が表示されない場合があります。これらのツールをOFFにしてみてください。

●プログラム・リスト●

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

namespace MyFrmApp
{
    public class MyForm : Form
    {
        private Label label;
        ComboBox combo;
        
        public MyForm()
        {
            this.Width = 300;
            this.Height = 200;
            setupControls();
        }
        public void setupControls()
        {
            label = new Label();
            label.Text = "type text:";
            label.Font = new Font("Geneva",12,FontStyle.Regular);
            label.Height = 30;
            label.Width = 300;
            this.Controls.Add(label);
            combo = new ComboBox();
            combo.Items.Add("Windows");
            combo.Items.Add("Mac OS X");
            combo.Items.Add("Linux");
            combo.Width = 100;
            combo.Height = 25;
            combo.Left = 50;
            combo.Top = 50;
            combo.SelectedValueChanged += combo_changed;
            combo.TextChanged += combo_changed;
            this.Controls.Add(combo);
        }
        
        private void combo_changed(object sender, System.EventArgs e)
        {
            int n = combo.SelectedIndex;
            string str = combo.Text;
            label.Text = "selected: " + n + " (" + str + ")";
        }
    }
}

※関連コンテンツ

「初心者のためのC#プログラミング入門」に戻る