C# 入門 & 実践 / C sharp

5-5. ListBox / ComboBox - リストボックス / コンボボックス -


コンボボックス1つ
リストボックス2つ
ボタン4つ
リストボックス1つ(メッセージ表示用)(コンテナのPanelの中に配置しています。)
を用意して

・登録ボタンをクリックするとコンボボックスの選択されている項目がリストボックス1、2両方になければリスト1へ登録される
・リストボックス1でアイテムを選択して、削除ボタンをクリックすると削除される。
・リストボックス1←→リストボックス2間でアイテムの移動を2つボタンを利用し可能とする。

コンボボックスのItemsにアイテム一覧を入れておく。
リストボックスには何も入れない。

Listbox.SelectionMode
One : 一つ選択可能
MultiSimple : 複数選択可能。一つずつ選択・解除
MultiExtended : Shift+選択で一括選択、Ctrl+選択で複数選択
これでリストボックスの動作を選択できます。



登録ボタン。
・登録ボタンをクリックするとコンボボックスの選択されている項目がリストボックス1、2両方になければリスト1へ登録される

        private void button1_Click(object sender, EventArgs e)
        {
            object newitem = comboBox1.SelectedItem;
            if (newitem == null)
            {
                // コンボボックスで選択されていない。
                label1.Text = "アイテムを選択してください。";
                return;
            }

            // リストボックスに無いことを確認する。あれば終了
            foreach (object x in this.Controls)
            {
                // ListBox かどうか確認
                ListBox lb = x as ListBox;
                if (lb != null)
                {
                    foreach (object o in lb.Items)
                    {
                        if (newitem == o)
                        {
                            // あれば終了。
                            label1.Text = "登録済";
                            return;
                        }
                    }
                }
            }

            // 登録が無いので ListBox1 へ登録
            listBox1.Items.Add(newitem);
            label1.Text = "登録 : " + newitem.ToString();
        }

削除ボタン
・リストボックス1でアイテムを選択して、削除ボタンをクリックすると削除される。

        private void button2_Click(object sender, EventArgs e)
        {
            // 選択されたオブジェクトをコピーしておく。
            object[] objs = new object[listBox1.SelectedItems.Count];
            listBox1.SelectedItems.CopyTo(objs,0);

            string msg = "";
            // ListBox1 で選択されているものを削除
            foreach (object o in objs)
            {
                listBox1.Items.Remove(o);
                msg += "Delete : " + o.ToString() + "\n";
            }
            label1.Text = msg;
        }

移動
・リストボックス1←→リストボックス2間でアイテムの移動を2つボタンを利用し可能とする。

        private void moveItem(int type)
        {
            string msg = "";
            // 移動元
            ListBox moto;
            // 移動先
            ListBox saki;
            if (type == 0)
            {
                // 1 -> 2
                moto = listBox1;
                saki = listBox2;
                msg += " 1 => 2 \n";
            }
            else
            {
                // 2 -> 1
                moto = listBox2;
                saki = listBox1;
                msg += " 1 <= 2 \n";
            }

            if (moto.SelectedItems.Count > 0)
            {
                // 選択されたオブジェクトをコピーしておく。
                object[] objs = new object[moto.SelectedItems.Count];
                moto.SelectedItems.CopyTo(objs, 0);

                // 元から削除して 先に登録する
                foreach (object o in objs)
                {
                    moto.Items.Remove(o);
                    saki.Items.Add(o);
                    msg += "Move : " + o.ToString() + "\n";
                }
            }
            else
            {
                msg += "移動するアイテムを選択してください。\n";
            }
            label1.Text = msg;
        }
        private void button3_Click(object sender, EventArgs e)
        {
            // 1 => 2
            moveItem(0);
        }

        private void button4_Click(object sender, EventArgs e)
        {
            // 1 <= 2
            moveItem(1);
        }

ちゃんと動きました。




5-4. CheckBox / CheckedListBox - チェックボックス - « 5. Windows アプリケーション » 5-6. RadioButton / GroupBox / LinkLabel - ラジオボタン -


C# 入門 & 実践 / C sharp