ListViewには、各項目にアイコンを付けることができます。
詳細モードで表示すると、アイコンが一番左の列に表示されます。ListViewSubItemのアイコンを設定するにはどうしたらいいですか?
他の列にアイコンを表示できますか?
ListViewには、各項目にアイコンを付けることができます。
詳細モードで表示すると、アイコンが一番左の列に表示されます。ListViewSubItemのアイコンを設定するにはどうしたらいいですか?
他の列にアイコンを表示できますか?
ListView
コントロールは、ネイティブでサブアイテムの画像をサポートしていません。最も簡単な方法は、DataGridView
に切り替えてDataGridViewImageColumn
を使用することです。それが不可能な場合は、ListView
コントロールのカスタム描画サポートを使用して、自分でアイコンを描画する必要があります。これを行うには、ListView.OwnerDraw = true
と設定し、ListView.DrawSubItem
とListView.DrawColumnHeader
のイベントを処理します。
private void listView1_DrawSubItem(object sender, DrawListViewSubItemEventArgs e)
{
// Only interested in 2nd column.
if (e.Header != this.columnHeader2)
{
e.DrawDefault = true;
return;
}
e.DrawBackground();
var imageRect = new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Height, e.Bounds.Height);
e.Graphics.DrawImage(SystemIcons.Information.ToBitmap(), imageRect);
}
private void listView1_DrawColumnHeader(object sender, DrawListViewColumnHeaderEventArgs e)
{
e.DrawDefault = true;
}
.NETのサポートはありません。
のListViewから継承し、独自のアイコンを描画します。
public class MyListView : ListView
{
protected override void OnDrawSubItem(System.Windows.Forms.DrawListViewSubItemEventArgs e)
{
base.OnDrawSubItem(e);
}
}
使用P /呼び出しと、リストビューにLVM_SETITEMメッセージを送る(あなたがコントロールの作成やLVM_SETEXTENDEDLISTVIEWSTYLE経由LVS_EX_SUBITEMIMAGESのスタイルを設定する必要があります)、サブ項目のインデックスと対応する画像のインデックスを指定します。あなたが挿入するすべてのリスト項目のためにそれを行う必要があります。
ObjectListViewは、.NET Winforms ListViewのオープンソースラッパーです。これは、@ ligget78が言及したp/invoke戦略を使用して、サブアイテム上のイメージをサポートします。また、ListViewの他の多くの一般的な問題を解決します。
それはあなたが最小限の労力で非常に見栄えの良いリストビューを作成することができます:
alt text http://objectlistview.sourceforge.net/cs/_images/fancy-screenshot2.png
が、この時に戦利品を取る:受け入れ答えに加えて
http://social.msdn.microsoft.com/forums/en-US/winforms/thread/d25b4ffa-2ea4-43cd-a3ae-8dd0387197ae/
、あなたDrawItemイベントも処理する必要があります。そうしないと、動作しません。
アイコンは「最初の」列に表示され、これもキーボードプレフィックス検索の基礎となります。考えられる解決策の1つは、最初の列のDisplayIndexを別のものに設定して列の順序を変更することです。
listView1.Columns[0].DisplayIndex = 1;
これはもちろん、1つの列にアイコンが必要な場合にのみ有効です。
なぜ 'var imageRect = e.Bounds; 'だけではなく、値がコピーされて参照されないようにすることで安全に扱えるようにするための値型です。 – ja72
実際の使用状況では、サブアイテムに含まれるアライメント、パディング、および/または追加のコンテンツを考慮してimageRectを調整することができます。 –