C#のListBoxとListViewの違いとは?使い分け・項目追加・列表示まで初心者向けに解説
はじめに
C#でWindowsアプリを作っていると、一覧表示のコントロールとして「ListBox」と「ListView」のどちらを使うべきか迷うことがあります。
どちらも複数の項目を画面に並べて表示できるコントロールですが、得意な用途は大きく異なります。簡単にいうと、ListBoxは「文字列や単純な選択肢の一覧」に向いており、ListViewは「名前・日時・状態など複数の情報を列で表示する一覧」に向いています。
この記事では、C#のListBoxとListViewの違い、使い分け、項目追加、列表示、選択項目の取得方法まで、初心者にもわかりやすく解説します。主にWindows Forms、つまりWinFormsのListBoxとListViewを前提に説明します。
1. C#のListBoxとListViewの違いを結論から解説
C#のListBoxとListViewの違いは、表示できる情報量と画面表現の自由度にあります。
ListBoxは、基本的に1つの項目を縦に並べて表示するためのコントロールです。一方、ListViewは、項目に加えてサブ項目を持たせたり、複数列で表示したり、アイコン付きで表示したりできます。
そのため、単純な一覧ならListBox、複数情報を見せたい一覧ならListViewと考えるとわかりやすいです。
1-1. ListBoxは「単純な一覧表示」に向いている
ListBoxは、選択肢や文字列の一覧を表示するためのコントロールです。
たとえば、次のような画面に向いています。
・都道府県一覧
・カテゴリ一覧
・商品名一覧
・ユーザー名一覧
・設定項目の一覧
・入力候補の一覧
ListBoxは使い方がシンプルで、項目を追加するだけなら次のように書けます。
C#listBox1.Items.Add("りんご");
listBox1.Items.Add("みかん");
listBox1.Items.Add("バナナ");
このように、1行に1つの情報を表示するだけでよい場合は、ListBoxが扱いやすいです。
1-2. ListViewは「列付き・詳細情報の一覧表示」に向いている
ListViewは、1つの項目に対して複数の情報を持たせたいときに便利です。
たとえば、次のような一覧に向いています。
・ファイル名、サイズ、更新日時
・社員名、部署、役職
・商品名、価格、在庫数
・タスク名、期限、状態
・ログの日時、種類、内容
ListViewでは、ViewプロパティをDetailsに設定することで、表のような列付き一覧を作れます。
C#listView1.View = View.Details;
listView1.Columns.Add("名前", 120);
listView1.Columns.Add("年齢", 60);
listView1.Columns.Add("部署", 100);
ListBoxよりも設定は少し増えますが、複数列の一覧や詳細表示が必要な画面ではListViewが適しています。
1-3. 初心者が迷ったときの使い分け早見表
C#でListBoxとListViewのどちらを使うべきか迷ったときは、次の基準で判断するとよいです。
| やりたいこと | おすすめ |
|---|---|
| 文字列を縦に並べたい | ListBox |
| 単純な選択肢を表示したい | ListBox |
| 複数選択できる一覧を作りたい | ListBoxまたはListView |
| 名前・日時・状態などを列で表示したい | ListView |
| ファイル一覧のような画面を作りたい | ListView |
| アイコン付きの一覧を作りたい | ListView |
| 表形式に近い一覧を作りたい | ListView |
| データ編集まで行いたい | DataGridViewも検討 |
初心者の場合、まずはListBoxで一覧表示の基本を覚え、その後にListViewで複数列表示や詳細表示を学ぶ流れがおすすめです。
2. C#のListBoxとは
ListBoxは、C#のWindows Formsでよく使われる一覧表示コントロールです。複数の項目を縦に並べて表示し、ユーザーに項目を選択させることができます。
ListBoxは非常にシンプルなコントロールなので、初心者でも扱いやすいのが特徴です。
2-1. ListBoxの基本機能
ListBoxの基本機能は、複数の項目を一覧として表示し、その中から1つまたは複数の項目を選択できることです。
主な機能は次のとおりです。
・項目の追加
・項目の削除
・選択項目の取得
・複数選択
・並び替え
・オブジェクトの表示
・DataSourceによるデータバインド
ListBoxでは、Itemsコレクションに値を追加することで一覧に表示できます。
C#listBox1.Items.Add("東京");
listBox1.Items.Add("大阪");
listBox1.Items.Add("名古屋");
このように、少ないコードで一覧表示を実装できる点がListBoxの魅力です。
2-2. ListBoxでできること
ListBoxでは、文字列だけでなくオブジェクトを追加することもできます。
C#listBox1.Items.Add(new User { Name = "田中", Age = 25 });
ただし、オブジェクトをそのまま追加した場合、表示される文字列はToStringメソッドの結果になります。意図した表示にしたい場合は、ToStringをオーバーライドするか、DisplayMemberを設定します。
また、SelectionModeプロパティを変更すれば、複数選択も可能です。
C#listBox1.SelectionMode = SelectionMode.MultiExtended;
ListBoxは、単純な一覧表示だけでなく、ユーザーが複数の候補から選択する画面にもよく使われます。
2-3. ListBoxが向いている画面例
ListBoxが向いているのは、表示する情報が1種類で済む画面です。
たとえば、「商品名だけを一覧表示する」「カテゴリ名だけを選択させる」「登録済みユーザー名を表示する」といったケースでは、ListBoxで十分です。
具体例としては、次のような画面があります。
・カテゴリ選択画面
・タグ選択画面
・都道府県一覧
・メニュー項目一覧
・ログ種別の選択
・追加済みアイテムの一覧
表示する情報が「名前だけ」「タイトルだけ」「選択肢だけ」のように単純であれば、ListBoxを選ぶと実装が簡単になります。
2-4. ListBoxを使うメリット・デメリット
ListBoxのメリットは、実装が簡単でわかりやすいことです。Items.Addで項目を追加し、SelectedItemで選択項目を取得できるため、初心者でもすぐに使えます。
一方で、ListBoxは複数列の詳細表示には向いていません。WinFormsのListBoxにはMultiColumnプロパティがありますが、これは表のように「名前」「価格」「日時」といった列を持たせる機能ではありません。項目を複数の縦列に折り返して表示するための機能です。
そのため、表形式の一覧を作りたい場合は、ListViewやDataGridViewを使うほうが自然です。
ListBoxのメリットは次のとおりです。
・コードが簡単
・単純な一覧表示に向いている
・選択項目の取得が簡単
・複数選択にも対応できる
・初心者が理解しやすい
デメリットは次のとおりです。
・複数列の詳細表示には向かない
・アイコン付き表示には向かない
・複雑なデータ表示には工夫が必要
・見た目の自由度はListViewより低い
3. C#のListViewとは
ListViewは、C#のWindows Formsで複数の項目を一覧表示するためのコントロールです。ListBoxよりも高機能で、列付き表示、アイコン表示、詳細表示などに対応しています。
ファイルエクスプローラーのような一覧画面を作りたい場合に、ListViewは非常に便利です。
3-1. ListViewの基本機能
ListViewの基本機能は、複数の項目をさまざまな表示形式で一覧表示できることです。
ListViewには、主に次の表示形式があります。
・LargeIcon
・SmallIcon
・List
・Details
・Tile
初心者がよく使うのはDetailsです。Detailsにすると、列を持った一覧を表示できます。
C#listView1.View = View.Details;
ListViewでは、ListViewItemが1行分のデータを表します。そして、SubItemsを使うことで2列目以降のデータを追加できます。
3-2. ListViewでできること
ListViewでは、次のようなことができます。
・複数列の一覧表示
・詳細情報の表示
・アイコン付き表示
・チェックボックス付き表示
・選択項目の取得
・行全体の選択
・グリッド線の表示
・列幅の指定
・サブ項目の追加
たとえば、名前、年齢、部署を表示する場合は、次のようにListViewItemとSubItemsを使います。
C#ListViewItem item = new ListViewItem("田中");
item.SubItems.Add("25");
item.SubItems.Add("営業部");
listView1.Items.Add(item);
このように、1行に複数の情報を表示できる点がListViewの大きな特徴です。
3-3. ListViewが向いている画面例
ListViewは、複数の情報を一覧で見せたい画面に向いています。
たとえば、次のような画面です。
・ファイル一覧画面
・社員一覧画面
・商品一覧画面
・タスク管理画面
・注文履歴画面
・ログ一覧画面
・在庫一覧画面
「項目名だけではなく、関連する情報も同じ行に表示したい」という場合は、ListViewを使うとわかりやすい画面になります。
たとえば、商品一覧であれば「商品名」「価格」「在庫数」を列として表示できます。タスク一覧であれば「タスク名」「期限」「状態」を列として表示できます。
3-4. ListViewを使うメリット・デメリット
ListViewのメリットは、表示形式の自由度が高いことです。Details表示にすれば表のような一覧を作れますし、ImageListと組み合わせればアイコン付きの一覧も作れます。
また、CheckBoxesプロパティをtrueにすれば、チェックボックス付きの一覧も作成できます。
C#listView1.CheckBoxes = true;
一方で、ListViewはListBoxよりも設定項目が多く、初心者には少し難しく感じることがあります。列を表示するにはViewをDetailsにし、Columnsを追加し、さらにListViewItemとSubItemsを正しく使う必要があります。
ListViewのメリットは次のとおりです。
・複数列表示ができる
・詳細情報の一覧表示に向いている
・アイコン表示に対応している
・チェックボックス付き一覧を作れる
・ファイル一覧のようなUIを作りやすい
デメリットは次のとおりです。
・ListBoxよりコードが少し複雑
・列表示には設定が必要
・データ編集には向いていない
・表計算のような編集画面ならDataGridViewのほうが適している
4. ListBoxとListViewの主な違い
ListBoxとListViewはどちらも一覧表示のためのコントロールですが、表示形式、複数列対応、アイコン表示、データ構造、実装のしやすさに違いがあります。
ここでは、それぞれの違いを具体的に見ていきます。
4-1. 表示形式の違い
ListBoxは、基本的に項目を縦方向に並べて表示します。
東京
大阪
名古屋
福岡
一方、ListViewは表示形式を切り替えることができます。特にDetails表示では、次のように列付きの一覧を作れます。
名前 年齢 部署
田中 25 営業部
佐藤 30 開発部
鈴木 28 総務部
つまり、単純な縦一覧ならListBox、表示形式を柔軟に変えたいならListViewが向いています。
4-2. 複数列表示の可否
ListBoxは、基本的に1項目を1行として表示します。複数列の表のように「名前」「価格」「在庫数」を別々の列として表示する用途には向いていません。
一方、ListViewはDetails表示を使うことで複数列を表示できます。
C#listView1.View = View.Details;
listView1.Columns.Add("商品名", 120);
listView1.Columns.Add("価格", 80);
listView1.Columns.Add("在庫", 80);
複数列が必要な時点で、ListViewを選ぶのが基本です。
4-3. アイコン表示・詳細表示への対応
ListViewは、ImageListを使うことでアイコン付きの一覧を作成できます。LargeIconやSmallIconを使えば、ファイル一覧や画像一覧のような見た目を作れます。
また、Detailsを使えば詳細表示にも対応できます。
ListBoxでも工夫すれば見た目をカスタマイズできますが、標準機能としてアイコン表示や詳細表示を使いやすいのはListViewです。
4-4. データ構造の違い
ListBoxでは、Itemsコレクションに文字列やオブジェクトを追加します。
C#listBox1.Items.Add("田中");
選択された項目はSelectedItemで取得できます。
C#string name = listBox1.SelectedItem.ToString();
一方、ListViewでは、ItemsコレクションにListViewItemを追加します。
C#ListViewItem item = new ListViewItem("田中");
item.SubItems.Add("25");
item.SubItems.Add("営業部");
listView1.Items.Add(item);
ListViewItemが1行目のメイン項目で、SubItemsが2列目以降の値です。この構造を理解すると、ListViewの使い方が一気にわかりやすくなります。
4-5. 実装のしやすさの違い
実装のしやすさでは、ListBoxのほうが簡単です。
ListBoxは、Items.Addで追加し、SelectedItemで取得するだけで基本的な操作ができます。
C#listBox1.Items.Add("項目1");
ListViewは、列を作成し、Viewを設定し、ListViewItemを作成し、SubItemsを追加する必要があります。
C#listView1.View = View.Details;
listView1.Columns.Add("名前", 100);
ListViewItem item = new ListViewItem("田中");
listView1.Items.Add(item);
そのため、初心者が最初に学ぶならListBoxが簡単です。ただし、実務ではListViewのほうが適している場面も多いため、両方の違いを理解しておくことが大切です。
5. ListBoxの使い方:項目を追加・削除・取得する方法
ここからは、C#のListBoxの基本的な使い方を紹介します。
ListBoxでよく使う操作は、項目の追加、選択項目の取得、項目の削除、複数選択の設定です。
5-1. ListBoxに項目を追加する方法
ListBoxに項目を追加するには、Items.Addメソッドを使います。
C#listBox1.Items.Add("C#");
listBox1.Items.Add("Java");
listBox1.Items.Add("Python");
複数の項目をまとめて追加したい場合は、Items.AddRangeを使うこともできます。
C#listBox1.Items.AddRange(new string[]
{
"C#",
"Java",
"Python",
"JavaScript"
});
Items.Addは1件ずつ追加するとき、Items.AddRangeはまとめて追加するときに便利です。
5-2. 選択された項目を取得する方法
ListBoxで選択された項目を取得するには、SelectedItemを使います。
C#if (listBox1.SelectedItem != null)
{
string selected = listBox1.SelectedItem.ToString();
MessageBox.Show(selected);
}
SelectedItemがnullの場合は、何も選択されていない状態です。そのため、取得する前にnullチェックを行うのが安全です。
選択されたインデックスを取得したい場合は、SelectedIndexを使います。
C#int index = listBox1.SelectedIndex;
SelectedIndexは、先頭の項目が0です。何も選択されていない場合は-1になります。
5-3. 項目を削除する方法
ListBoxから項目を削除するには、Items.RemoveまたはItems.RemoveAtを使います。
値を指定して削除する場合は、Items.Removeを使います。
C#listBox1.Items.Remove("C#");
インデックスを指定して削除する場合は、Items.RemoveAtを使います。
C#listBox1.Items.RemoveAt(0);
選択中の項目を削除する場合は、次のように書けます。
C#if (listBox1.SelectedIndex != -1)
{
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}
何も選択されていない状態でRemoveAtを実行するとエラーになる可能性があるため、SelectedIndexを確認してから削除しましょう。
5-4. 複数選択を有効にする方法
ListBoxで複数選択を有効にするには、SelectionModeプロパティを設定します。
C#listBox1.SelectionMode = SelectionMode.MultiSimple;
または、ShiftキーやCtrlキーを使った複数選択を可能にする場合は、MultiExtendedを使います。
C#listBox1.SelectionMode = SelectionMode.MultiExtended;
複数選択された項目を取得するには、SelectedItemsを使います。
C#foreach (var item in listBox1.SelectedItems)
{
MessageBox.Show(item.ToString());
}
複数選択を使う場合は、SelectedItemではなくSelectedItemsを使う点に注意しましょう。
5-5. ListBoxの基本サンプルコード
以下は、ListBoxに項目を追加し、選択された項目を取得し、削除する基本サンプルです。
C#using System;
using System.Windows.Forms;
namespace ListBoxSample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listBox1.Items.Add("C#");
listBox1.Items.Add("Java");
listBox1.Items.Add("Python");
}
private void buttonAdd_Click(object sender, EventArgs e)
{
listBox1.Items.Add("新しい項目");
}
private void buttonShow_Click(object sender, EventArgs e)
{
if (listBox1.SelectedItem != null)
{
MessageBox.Show("選択項目: " + listBox1.SelectedItem.ToString());
}
else
{
MessageBox.Show("項目が選択されていません。");
}
}
private void buttonDelete_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex != -1)
{
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}
else
{
MessageBox.Show("削除する項目を選択してください。");
}
}
}
}
このサンプルでは、ListBoxに項目を表示し、ボタン操作で追加、表示、削除を行っています。ListBoxの基本操作は、この3つを覚えるだけでも十分に使い始められます。
6. ListViewの使い方:項目追加・列表示・詳細表示の方法
次に、C#のListViewの基本的な使い方を解説します。
ListViewはListBoxよりも少し設定が多いですが、列付きの一覧を作れるため、実務ではよく使われます。
6-1. ListViewに項目を追加する方法
ListViewに項目を追加するには、ListViewItemを作成してItems.Addで追加します。
C#ListViewItem item = new ListViewItem("田中");
listView1.Items.Add(item);
ListBoxでは文字列をそのまま追加することが多いですが、ListViewではListViewItemを使うのが基本です。
1列だけの表示であれば、これだけでも項目を追加できます。
6-2. ListViewで列を表示する方法
ListViewで列を表示するには、Columns.Addで列を追加します。
C#listView1.Columns.Add("名前", 120);
listView1.Columns.Add("年齢", 60);
listView1.Columns.Add("部署", 100);
ただし、列を追加しただけでは表示されないことがあります。ListViewで列を表示するには、ViewプロパティをDetailsに設定する必要があります。
6-3. ViewプロパティをDetailsに設定する方法
ListViewで表のような詳細表示を行うには、ViewプロパティをDetailsに設定します。
C#listView1.View = View.Details;
さらに、行全体を選択できるようにしたい場合は、FullRowSelectをtrueにします。
C#listView1.FullRowSelect = true;
グリッド線を表示したい場合は、GridLinesをtrueにします。
C#listView1.GridLines = true;
これらを設定すると、表形式の一覧として見やすくなります。
6-4. SubItemsで複数列のデータを追加する方法
ListViewで2列目以降のデータを追加するには、SubItemsを使います。
C#ListViewItem item = new ListViewItem("田中");
item.SubItems.Add("25");
item.SubItems.Add("営業部");
listView1.Items.Add(item);
この例では、1列目に「田中」、2列目に「25」、3列目に「営業部」が表示されます。
重要なのは、ListViewItemの最初の文字列が1列目になり、SubItems.Addで追加した値が2列目以降になるという点です。
6-5. ListViewの基本サンプルコード
以下は、ListViewで列を作成し、複数列のデータを追加する基本サンプルです。
C#using System;
using System.Windows.Forms;
namespace ListViewSample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
listView1.View = View.Details;
listView1.FullRowSelect = true;
listView1.GridLines = true;
listView1.Columns.Add("名前", 120);
listView1.Columns.Add("年齢", 60);
listView1.Columns.Add("部署", 100);
AddUser("田中", "25", "営業部");
AddUser("佐藤", "30", "開発部");
AddUser("鈴木", "28", "総務部");
}
private void AddUser(string name, string age, string department)
{
ListViewItem item = new ListViewItem(name);
item.SubItems.Add(age);
item.SubItems.Add(department);
listView1.Items.Add(item);
}
private void buttonShow_Click(object sender, EventArgs e)
{
if (listView1.SelectedItems.Count > 0)
{
ListViewItem selectedItem = listView1.SelectedItems[0];
string name = selectedItem.Text;
string age = selectedItem.SubItems[1].Text;
string department = selectedItem.SubItems[2].Text;
MessageBox.Show($"{name} / {age} / {department}");
}
else
{
MessageBox.Show("項目が選択されていません。");
}
}
}
}
ListViewでは、選択された項目を取得するときにSelectedItemsを使います。SelectedItems.Countが0の場合は何も選択されていない状態なので、必ず確認してから値を取得しましょう。
7. ListBoxとListViewの使い分け方
ListBoxとListViewの使い分けは、表示したいデータの内容で判断します。
1つの項目だけを表示するならListBox、複数の情報を列として表示するならListViewです。
7-1. 単一項目の一覧ならListBox
表示したい情報が1つだけの場合は、ListBoxが適しています。
たとえば、次のようなデータです。
・カテゴリ名
・都道府県名
・商品名
・ユーザー名
・タグ名
これらは1項目だけ表示できれば十分なことが多いため、ListBoxを使うと実装が簡単です。
C#listBox1.Items.Add("管理者");
listBox1.Items.Add("一般ユーザー");
listBox1.Items.Add("ゲスト");
選択肢を表示してユーザーに選ばせるだけなら、ListBoxで十分です。
7-2. 名前・日時・状態など複数情報を表示するならListView
1つの行に複数の情報を表示したい場合は、ListViewを使います。
たとえば、タスク一覧であれば次のような情報を表示したくなります。
・タスク名
・期限
・状態
このような場合、ListBoxでは情報を1つの文字列にまとめる必要があります。
C#listBox1.Items.Add("資料作成 / 2026/06/30 / 未完了");
しかし、ListViewなら列を分けて表示できます。
C#ListViewItem item = new ListViewItem("資料作成");
item.SubItems.Add("2026/06/30");
item.SubItems.Add("未完了");
listView1.Items.Add(item);
複数情報を見やすく整理したい場合は、ListViewが適しています。
7-3. アイコン付き一覧ならListView
アイコン付きの一覧を作りたい場合は、ListViewを選びます。
ListViewは、SmallImageListやLargeImageListを設定することで、項目にアイコンを表示できます。
たとえば、ファイル一覧で「フォルダ」「テキストファイル」「画像ファイル」などをアイコン付きで表示したい場合に便利です。
ListBoxでもオーナードローを使えば独自描画はできますが、初心者には難しくなります。標準的な機能でアイコン付き一覧を作るなら、ListViewのほうが向いています。
7-4. 入力補助や選択肢表示ならListBox
入力補助や選択肢の表示には、ListBoxが向いています。
たとえば、検索候補、タグ候補、カテゴリ候補などを表示する場合です。
ListBoxはシンプルで、選択された値を取得しやすいため、ユーザーに何かを選ばせる画面に適しています。
C#if (listBox1.SelectedItem != null)
{
textBox1.Text = listBox1.SelectedItem.ToString();
}
「一覧から選ばせて、その値を使う」という処理であれば、ListBoxを選ぶと実装しやすいです。
7-5. 実務での選び方の具体例
実務では、画面の目的に合わせてListBoxとListViewを使い分けます。
たとえば、設定画面で「テーマ」「言語」「カテゴリ」などを選ばせるだけならListBoxが適しています。表示する情報が1つで済み、選択処理も簡単だからです。
一方、受注管理画面で「注文番号」「顧客名」「注文日」「金額」「状態」を表示するならListViewが適しています。複数列で情報を整理できるため、ユーザーが内容を把握しやすくなります。
さらに、一覧上で直接セルを編集したい、並べ替えやフィルタリングを本格的に行いたい、データベースのテーブルをそのまま表示したい場合は、ListViewではなくDataGridViewを検討するとよいです。
8. 初心者がつまずきやすいポイント
C#でListBoxやListViewを使い始めた初心者がつまずきやすいポイントを紹介します。
特にListViewは、列が表示されない、SubItemsの意味がわからない、選択項目が取得できないといったトラブルがよくあります。
8-1. ListViewで列が表示されない原因
ListViewで列が表示されない原因として多いのは、ViewプロパティがDetailsになっていないことです。
列を追加していても、ViewがDetailsでなければ列表示になりません。
C#listView1.View = View.Details;
また、Columns.Addで列を追加していない場合も、列は表示されません。
C#listView1.Columns.Add("名前", 120);
listView1.Columns.Add("年齢", 60);
ListViewで列が表示されない場合は、まず次の2点を確認しましょう。
・ViewがDetailsになっているか
・Columnsに列を追加しているか
この2つを設定すれば、基本的には列が表示されます。
8-2. ListViewItemとSubItemsの関係
ListViewで初心者が混乱しやすいのが、ListViewItemとSubItemsの関係です。
ListViewItemは1行分のデータを表します。そして、ListViewItemのTextが1列目、SubItemsが2列目以降です。
C#ListViewItem item = new ListViewItem("田中"); // 1列目
item.SubItems.Add("25"); // 2列目
item.SubItems.Add("営業部"); // 3列目
つまり、ListViewでは「1行をListViewItemとして作り、2列目以降をSubItemsで追加する」と覚えるとわかりやすいです。
選択された行の値を取得する場合は、次のようにします。
C#ListViewItem item = listView1.SelectedItems[0];
string name = item.Text;
string age = item.SubItems[1].Text;
string department = item.SubItems[2].Text;
SubItems[0]は1列目に相当しますが、通常はitem.Textで取得することが多いです。
8-3. ListBoxにオブジェクトを追加したときの表示
ListBoxには文字列だけでなく、オブジェクトも追加できます。
C#listBox1.Items.Add(new User { Name = "田中", Age = 25 });
しかし、このままだと画面にはクラス名のような文字列が表示される場合があります。これは、ListBoxが表示文字列としてToStringメソッドの結果を使うためです。
意図した文字列を表示したい場合は、ToStringをオーバーライドします。
C#public class User
{
public string Name { get; set; }
public int Age { get; set; }
public override string ToString()
{
return Name;
}
}
または、DataSourceとDisplayMemberを使う方法もあります。
C#listBox1.DataSource = users;
listBox1.DisplayMember = "Name";
オブジェクトをListBoxに追加する場合は、「何が表示されるのか」を意識することが大切です。
8-4. 選択項目が取得できないときの確認点
ListBoxやListViewで選択項目が取得できない場合は、何も選択されていない状態で取得しようとしている可能性があります。
ListBoxでは、SelectedItemがnullかどうかを確認します。
C#if (listBox1.SelectedItem != null)
{
string value = listBox1.SelectedItem.ToString();
}
ListViewでは、SelectedItems.Countを確認します。
C#if (listView1.SelectedItems.Count > 0)
{
ListViewItem item = listView1.SelectedItems[0];
}
また、ListViewで行全体を選択しやすくしたい場合は、FullRowSelectをtrueにすると操作しやすくなります。
C#listView1.FullRowSelect = true;
選択項目を取得する処理では、必ず「選択されているか」を確認してから値を使いましょう。
8-5. WinFormsとWPFで使い方が異なる点
C#には、Windows FormsだけでなくWPFというUIフレームワークもあります。WinFormsとWPFでは、同じListBoxやListViewという名前のコントロールがあっても、使い方が異なります。
WinFormsでは、Items.AddやColumns.Addを使ってコードから直接項目を追加することが多いです。
C#listBox1.Items.Add("項目1");
一方、WPFでは、XAMLやデータバインディングを使って表示することが多くなります。
XML<ListBox ItemsSource="{Binding Users}" DisplayMemberPath="Name" />
WPFのListViewでは、GridViewを使って列表示を行います。
XML<ListView ItemsSource="{Binding Users}">
<ListView.View>
<GridView>
<GridViewColumn Header="名前" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="年齢" DisplayMemberBinding="{Binding Age}" />
</GridView>
</ListView.View>
</ListView>
この記事で紹介しているサンプルコードは、主にWinForms向けです。WPFで同じことをしたい場合は、XAML、ItemsSource、Binding、GridViewなどを使う点に注意してください。
9. ListBoxとListViewに関するよくある質問
ここでは、C#のListBoxとListViewに関する初心者向けのよくある質問に答えます。
9-1. ListBoxで複数列表示はできる?
WinFormsのListBoxにはMultiColumnプロパティがありますが、これは表のような複数列表示をするための機能ではありません。項目を横方向に折り返して表示するための機能です。
たとえば、次のように設定できます。
C#listBox1.MultiColumn = true;
しかし、「名前」「年齢」「部署」のように列ごとに意味を持たせて表示したい場合は、ListBoxではなくListViewを使うほうが適しています。
本格的な表形式の表示には、ListViewまたはDataGridViewを使いましょう。
9-2. ListViewとDataGridViewの違いは?
ListViewは、一覧を見やすく表示するためのコントロールです。列表示やアイコン表示に対応しており、ファイル一覧やログ一覧のような画面に向いています。
一方、DataGridViewは、表形式のデータを表示・編集するためのコントロールです。セル単位で編集したり、データベースのテーブルのような情報を扱ったりする場合に向いています。
簡単に使い分けるなら、次のようになります。
| 用途 | おすすめ |
|---|---|
| 一覧を表示したい | ListView |
| アイコン付きで表示したい | ListView |
| セルを編集したい | DataGridView |
| 表形式データを扱いたい | DataGridView |
| データベースの内容を表示・編集したい | DataGridView |
表示中心ならListView、編集中心ならDataGridViewと考えるとわかりやすいです。
9-3. ListViewでチェックボックスは使える?
ListViewでは、CheckBoxesプロパティをtrueにするとチェックボックスを表示できます。
C#listView1.CheckBoxes = true;
チェックされた項目を取得するには、CheckedItemsを使います。
C#foreach (ListViewItem item in listView1.CheckedItems)
{
MessageBox.Show(item.Text);
}
複数の項目を選択させたい場合や、対象データをチェックで選ばせたい場合に便利です。
9-4. ListBoxとComboBoxの違いは?
ListBoxとComboBoxは、どちらも複数の候補から選択させるためのコントロールです。
ListBoxは、一覧が常に画面に表示されます。一方、ComboBoxは、通常は1行だけ表示され、クリックすると候補一覧が開きます。
使い分けは次のとおりです。
| 用途 | おすすめ |
|---|---|
| 複数の候補を常に見せたい | ListBox |
| 画面スペースを節約したい | ComboBox |
| 1つだけ選ばせたい | ComboBox |
| 複数選択させたい | ListBox |
画面に余裕があり、候補を見せたい場合はListBox、画面をコンパクトにしたい場合はComboBoxが向いています。
9-5. 初心者はListBoxとListViewのどちらから覚えるべき?
初心者は、まずListBoxから覚えるのがおすすめです。
ListBoxは、Items.Addで項目を追加し、SelectedItemで選択項目を取得できるため、一覧表示の基本を学びやすいです。
ListBoxに慣れたら、次にListViewを学ぶとよいでしょう。ListViewでは、ListViewItem、SubItems、Columns、View.Detailsなど、少し複雑な概念が出てきますが、実務で役立つ場面が多いです。
学習順としては、次の流れがおすすめです。
ListBoxで単純な一覧表示を覚える
ListBoxで選択項目の取得を覚える
ListBoxで追加・削除を覚える
ListViewで列表示を覚える
ListViewでSubItemsを使った複数列表示を覚える
必要に応じてDataGridViewも学ぶ
この順番で学ぶと、C#の一覧表示コントロールを無理なく理解できます。
まとめ
C#のListBoxとListViewは、どちらも一覧表示に使うコントロールですが、向いている用途が異なります。
ListBoxは、単純な項目一覧や選択肢の表示に向いています。Items.Addで簡単に項目を追加でき、SelectedItemで選択された項目を取得できるため、初心者にも扱いやすいコントロールです。
一方、ListViewは、複数列の一覧表示や詳細情報の表示に向いています。ViewをDetailsに設定し、ColumnsとSubItemsを使うことで、表のような一覧を作成できます。また、アイコン表示やチェックボックス表示にも対応しているため、より実用的な一覧画面を作りたいときに便利です。
使い分けの基本は、次のとおりです。
| 条件 | 使うコントロール |
|---|---|
| 単純な一覧を表示したい | ListBox |
| 選択肢を表示したい | ListBox |
| 複数列で表示したい | ListView |
| 詳細情報を表示したい | ListView |
| アイコン付き一覧を作りたい | ListView |
| セルを編集したい | DataGridView |
初心者はまずListBoxで一覧表示の基本を覚え、その後にListViewで列表示や詳細表示を学ぶのがおすすめです。
C#で画面を作るときは、「表示する情報が1つだけか」「複数の情報を列で見せたいか」を基準に、ListBoxとListViewを選びましょう。

