ListView では、各項目にアイコンを設定できます。
詳細モードで表示している場合、アイコンは一番左の列に表示されます。
他の列にアイコンを表示できますか?
ListView では、各項目にアイコンを設定できます。
詳細モードで表示している場合、アイコンは一番左の列に表示されます。
他の列にアイコンを表示できますか?
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;
}
P / Invokeを使用して、 LVM_SETITEMメッセージをリストビューに送信し(コントロールの作成時またはLVM_SETEXTENDEDLISTVIEWSTYLEを介してLVS_EX_SUBITEMIMAGESスタイルを設定する必要があります)、サブアイテムインデックスと対応する画像インデックスを指定します。挿入するすべてのリストアイテムに対してこれを行う必要があります。
ObjectListViewは、.NET Winforms ListView のオープン ソース ラッパーです。@ligget78 が言及した p/invoke 戦略を使用して、サブアイテムの画像をサポートします。また、ListView に関する他の多くの一般的な問題も解決します。
最小限の労力で非常に見栄えの良い ListViews を作成できます。
(出典: sourceforge.net )
ListView から継承し、独自のアイコンを描画します。
public class MyListView : ListView
{
protected override void OnDrawSubItem(System.Windows.Forms.DrawListViewSubItemEventArgs e)
{
base.OnDrawSubItem(e);
}
}
これに対する.NETサポートはありません。
これを略奪してください:
http://social.msdn.microsoft.com/forums/en-US/winforms/thread/d25b4ffa-2ea4-43cd-a3ae-8dd0387197ae/
受け入れられた回答に加えて、DrawItem イベントも処理する必要があります。そうしないと、機能しません。