Domanda

In un ListView è possibile avere le icone su ciascuna voce.
Durante la visualizzazione di dettagli-modalità, l'icona viene visualizzata nella colonna più a sinistra.

Posso mostrare un'icona in qualche altra colonna?

È stato utile?

Soluzione

Il controllo ListView non supporta le immagini in sotto-voci in modo nativo. La cosa più semplice da fare è passare a un DataGridView e utilizzare un DataGridViewImageColumn. Se questo non è possibile, allora avrete bisogno di disegnare le icone da soli utilizzando il supporto pareggio personalizzato nel controllo ListView. Per fare questo insieme ListView.OwnerDraw = true e gestire gli eventi ListView.DrawSubItem e 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;
}

Altri suggerimenti

Usa P / Invoke e inviare LVM_SETITEM messaggio al ListView (è necessario impostare lo stile LVS_EX_SUBITEMIMAGES sulla creazione di controllo o tramite LVM_SETEXTENDEDLISTVIEWSTYLE), specificare l'indice sottovoce e l'indice di immagine corrispondente. Sarà necessario farlo per ogni elemento della lista si inserisce.

ObjectListView è una fonte involucro aperto intorno a un ListView NET WinForms. Supporta le immagini su elementi secondari che utilizzano il P / Invoke strategia che che @ ligget78 menzionato. Risolve anche molti altri problemi comuni con un controllo ListView.

E 'ti permette di fare molto bello ListViews guardando con un minimo sforzo:

alt text
(fonte: sourceforge.net )

Eredita da ListView e trarre le vostre icone.

public class MyListView : ListView
{
    protected override void OnDrawSubItem(System.Windows.Forms.DrawListViewSubItemEventArgs e)
    {
        base.OnDrawSubItem(e);
    }
}

L'icona viene visualizzata nella colonna "prima", e questa è anche la base per la ricerca del prefisso tastiera. Una possibile soluzione potrebbe essere quella di riordinare le colonne impostando la DisplayIndex della prima colonna a qualcos'altro.

listView1.Columns[0].DisplayIndex = 1;

Questo ovviamente funziona solo se avete bisogno di un'icona in una sola colonna.

Non c'è alcun supporto .NET per questo.

Date un'occhiata a questo progetto.

Date bottino a questo:

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

In aggiunta alla risposta accettata, è necessario gestire l'evento DrawItem così, o non funzionerà.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top