14

ListView では、各項目にアイコンを設定できます。
詳細モードで表示している場合、アイコンは一番左の列に表示されます。

他の列にアイコンを表示できますか?

4

7 に答える 7

13

ListViewコントロールは、サブ項目の画像をネイティブにサポートしていません。最も簡単な方法は、 に切り替えてDataGridViewを使用することDataGridViewImageColumnです。それが不可能な場合は、ListViewコントロールのカスタム描画サポートを使用して自分でアイコンを描画する必要があります。これを行うには、およびイベントを設定ListView.OwnerDraw = trueして処理します。ListView.DrawSubItemListView.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;
}
于 2009-12-11T16:22:44.813 に答える
7

P / Invokeを使用して、 LVM_SETITEMメッセージをリストビューに送信し(コントロールの作成時またはLVM_SETEXTENDEDLISTVIEWSTYLEを介してLVS_EX_SUBITEMIMAGESスタイルを設定する必要があります)、サブアイテムインデックスと対応する画像インデックスを指定します。挿入するすべてのリストアイテムに対してこれを行う必要があります。

于 2009-12-11T16:38:29.710 に答える
6

ObjectListViewは、.NET Winforms ListView のオープン ソース ラッパーです。@ligget78 が言及した p/invoke 戦略を使用して、サブアイテムの画像をサポートします。また、ListView に関する他の多くの一般的な問題も解決します。

最小限の労力で非常に見栄えの良い ListViews を作成できます。

代替テキスト
(出典: sourceforge.net )

于 2009-12-17T07:46:17.293 に答える
2

ListView から継承し、独自のアイコンを描画します。

public class MyListView : ListView
{
    protected override void OnDrawSubItem(System.Windows.Forms.DrawListViewSubItemEventArgs e)
    {
        base.OnDrawSubItem(e);
    }
}
于 2009-12-11T14:58:39.490 に答える
0

これに対する.NETサポートはありません。

このプロジェクトをご覧ください。

于 2009-12-11T14:55:29.387 に答える
0

これを略奪してください:

http://social.msdn.microsoft.com/forums/en-US/winforms/thread/d25b4ffa-2ea4-43cd-a3ae-8dd0387197ae/

受け入れられた回答に加えて、DrawItem イベントも処理する必要があります。そうしないと、機能しません。

于 2012-11-12T11:33:06.033 に答える