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

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

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

■ListBoxと複数選択

やはり複数の項目を表示して選択するコントロールに「ListBox」というクラスもあります。これは文字通り、リストをそのまま表示して選択するためのものです。ComboBoxと違い、直接テキストを入力などはしないため、ただ「用意された項目から選択する」ということだけを考えればよいでしょう。

ただし、ComboBoxにはなかった別の問題(?)もあります。それは「複数の項目が選択できる」という点です。では、選択に関するプロパティとイベントを整理しておきましょう。

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

●選択の方式に関するプロパティ
SelectionMode――選択方式に関するもの。SelectionMode列挙体の「None」「One」「MultiSimple」「MultiExtended」から指定します。

●選択項目に関するプロパティ
SelectedIndex――選択されている項目のインデックス番号
SelectedItem――選択されている項目(Objectインスタンス)
SelectedValue――選択されている値
SelectedIndices――選択されている複数項目の全インデックス番号
SelectedItems――選択されているすべての項目(Objectインスタンス)

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

ListBoxには「SelectionMode」というプロパティがあり、これで選択方式を設定できます。デフォルトではSelectionMode.Oneが設定されており、1つの項目だけが選択できるようになっています。SelectionMode.MultiSimpleにすると複数の項目が選択できます。またSelectionMode.MultiExtendedにすれば、シフトキーとCtrlキーを使って複数項目を選択できるようになります。

1つの項目だけしか選択できない場合、その選択状態の利用の仕方はComboBoxとほぼ同じです。SelectedIndexSelectedItemで選択されている項目のインデックス番号やobjectを取り出すことができます。

が、複数の項目を選択する場合には、これらのプロパティではなく、SelectedIndicesSelectedItemsといったプロパティを使います(これらは複数形の名前になっています)。これらは選択されているすべての項目をコレクションにまとめて管理します。ですから、これらの値をforeachなどの繰り返し取り出して処理すれば、選択された全項目を扱えるようになるでしょう。

下のリスト欄にそのサンプルを挙げておきます。ここでは複数項目を選択可能にし、選択されている項目すべてを表示するようになっています。SelectedValueChangedのイベント処理メソッドでどのように選択項目を処理しているか見れば、複数項目の選択の使い方がわかるでしょう。

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

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

●プログラム・リスト●

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

namespace MyFrmApp
{
    public class MyForm : Form
    {
        private Label label;
        ListBox list;
        
        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);
            list = new ListBox();
            list.Width = 100;
            list.Height = 100;
            list.Left = 50;
            list.Top = 50;
            list.SelectionMode = SelectionMode.MultiExtended;
            list.Items.Add("Hello");
            list.Items.Add("Welcome");
            list.Items.Add("Bye!");
            list.SelectedValueChanged += list_changed;
            this.Controls.Add(list);
        }
        
        private void list_changed(object sender, System.EventArgs e)
        {
            string res = "selected: ";
            foreach(string obj in list.SelectedItems)
            {
                res += obj + " ";
            }
            label.Text = res;
        }
    }
}

※関連コンテンツ

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