6月 14

項目を選択する

ListBoxの項目をプログラムで選択する例です。

        private void button1_Click(object sender, EventArgs e)
        {
            // すべての項目の選択を解除
            listBox1.ClearSelected();

            // インデックス0番の項目を選択
            listBox1.SetSelected(0, true);
            listBox1.SelectedIndex = 0;     // こちらでもOK

            // Textプロパティに値を指定する方法もあります
            listBox1.Text = "苺";
            listBox1.SelectedItem = "苺";   // こちらでもOK

            // 複数の項目を選択する場合
            for (int index = 0; index < 3; index++)
                listBox1.SetSelected(index, true);
        }
6月 14

選択方法を変更する(単一選択、複数選択など)

ListBoxはデフォルトで単一選択ですが
SelectionModeプロパティの値を変更し
選択方法を変更することができます。

SelectionModeプロパティに設定できる値には次のものがあります。

    SelectionMode.One              一選択(デフォルトです)
    SelectionMode.MultiSimple       複数選択
    SelectionMode.MultiExtended     複数選択(CTRLやShiftキーでの選択も可能)
    SelectionMode.None              選択不可

複数選択の場合の
選択されている項目を取得する例は次のようになります。

        private void button1_Click(object sender, EventArgs e)
        {
            // 選択されているすべての項目の文字列を表示
            foreach (string item in listBox1.SelectedItems)
                Console.WriteLine(item);

            // 選択されているすべての項目のインデックスを表示
            foreach (int index in listBox1.SelectedIndices)
                Console.WriteLine(index);
        }
6月 14

選択されている項目を取得する

ListBoxで選択している項目を取得するには
SelectedIndexプロパティを参照します。

選択している項目を設定する場合も同様に
SelectedIndexプロパティに選択したい項目のインデックスを指定します。

下記はFormにListBoxを1つ、Buttonを1つ配置し
Buttonをクリックすると
選択している項目の文字列を表示するサンプルです。

        private void button1_Click(object sender, EventArgs e)
        {
            // 選択されている項目のインデックスを取得
            int index = listBox1.SelectedIndex;

            // 選択されていればインデックスに0以上の値が入ります
            if (index >= 0)
            {
                // 選択されている項目を表示(Itemsはobjectなのでキャストしています)
                string item = (string)listBox1.Items[index];
                MessageBox.Show(item);
            }

            // またはSelectedItemプロパティを参照します。
            // 何も選択されていなければnullが入っています
            MessageBox.Show((string)listBox1.SelectedItem);
        }
6月 14

項目を追加、削除、検索

ListBoxの項目はItemsコレクションに保存されています。
項目が固定であれば、デザイン時にItemsプロパティーに
改行区切りで入力しておけばOKです。

以下はFormにListBoxを1つ配置して
起動時のLoadイベント内で項目に対する各処理を行っています。

        private void Form1_Load(object sender, EventArgs e)
        {
            // すべての項目を削除
            listBox1.Items.Clear();

            // 項目を1つずつ追加
            listBox1.Items.Add("りんご");
            listBox1.Items.Add("みかん");

            // 項目を複数まとめて追加(こちらが高速)
            string[] items = {"スイカ", "メロン", "苺"};
            listBox1.Items.AddRange(items);

            // 項目を指定して削除
            listBox1.Items.Remove("みかん");

            // IndexOfで項目のインデックスを取得
            // RemoveAtでインデックスを指定して削除
            listBox1.Items.RemoveAt(listBox1.Items.IndexOf("りんご"));
        }

■結果

listbox_item

6月 14

リンクラベルコントロールの使い方

LinkLabelコントロールはクリッカブルなLabelコントロールです。

例えば、Textプロパティーに http://www.yahoo.co.jp/
のようなURLを設定しておき、クリックされた際の LinkClicked イベントを捕捉して
ブラウザを開くサンプルは次のようになります。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            try 
            {
                // ブラウザを起動
                System.Diagnostics.Process.Start(linkLabel1.Text); 
            }
            catch(Exception ex)
            {
                // エラー
                System.Diagnostics.Debug.WriteLine(ex.Message);
            }
        }
    }
}
6月 14

ラベルコントロールの使い方

Labelコントロールは文字を表示するだけの簡素なコントロールなので
出来ることはあまり多くありませんが
主なプロパティーについてまとめます。

クリッカブルなラベルを利用したい場合はLinkLabelコントロールを利用します。

Font
	フォントを指定します。
BorderStyle
	ラベルを境界線で囲う場合指定します。
Text
	文字列を取得設定します。
TextAlign
	テキストのラベル内での配置位置を決めます。
6月 14

ImageListの使い方

ImageListコントロールは
これ単体で使うことはあまりないかもしれません。

画像を複数蓄えて
配列にアクセスするようにそれを扱うためのコントロールです。

TreeViewコントロールでImageListを使う例はこちら
エクスプローラーのようなドライブとフォルダのツリーを作る

この例では
TreeViewの各Nodeに表示するアイコンをImageListに蓄えておいて
Nodeを追加する際に表示したいアイコンの番号を指定しています。

6月 14

コントロールをグループにまとめる

GroupBoxはコントロールをグループにまとめるために利用されます。
特にラジオボタンのように
グループ内で単一選択させたいような場合にそれらを囲います。

下の例では
種別グループの中で3つの選択肢から1つを選択
料金グループの中で3つの選択肢から1つを選択
を行うためにグループ化を行っています。

また、コントロールが増えてきた時に
単に視覚的にわかりやすいよう、デザインとして利用されることもあるコントロールです。

group

6月 14

コントロールを自動整列する

FlowLayoutPanelを利用すれば
コントロールをパネル上で自動整列させることが可能です。
例として画像をサムネイルっぽく表示させてみます。

パネル上のコントロールは
Controlsコレクションで管理されています。

フォームをリサイズすると、それに追従して中のコントロールも自動整列されます。

flowlayoutpanel

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // レイアウトパネルをFormいっぱいに広げる
            flowLayoutPanel1.Dock = DockStyle.Fill;

            // 10個のPictureBoxを追加し、サムネイルのように表示
            for (int i = 0; i < 10; i++)
            {
                // 追加するPictureBoxを生成
                PictureBox pbox = new PictureBox();
                Bitmap bmp = new Bitmap(@"c:\hp\image\download.png");
                pbox.Image = bmp;

                // PictureBoxを追加
                flowLayoutPanel1.Controls.Add(pbox);
            }
        }
    }
}