Frage

ich habe ein kleines Problem mit einem Listview.

ich es Listenansicht Artikel gut mit laden kann, aber wenn ich die Hintergrundfarbe ist es nicht der Farbe des ganzen Weg auf die linken Seite der Reihe zeichnen [Die Listviewitem mit ListViewSubItems geladen, um eine Rasteransicht zu machen, nur die erste Spalte zeigt den Fehler]. Es ist ein ein schmaler Streifen, die nicht malen. Die Breite dieser Streifen ist ungefähr die gleiche wie ein Zeilenkopf wäre, wenn ich einen Zeilenkopf hatte.

Wenn Sie einen Gedanken auf, was getan werden kann, um den Hintergrund zu machen zeichnen Ich würde gerne hören.

Jetzt versucht gerade eine neue Idee, ich biete eine zehn Stimme Prämie für die erste Lösung, die mich noch dieses schreckliche Konstrukt eines Durcheinander einer Pseudorasteransicht hat. [Ich liebe Legacy-Code.]

Edit:

Hier ist ein Beispiel, das das Problem zeigt.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        ListView lv = new ListView();

        lv.Dock = System.Windows.Forms.DockStyle.Fill;
        lv.FullRowSelect = true;
        lv.GridLines = true;
        lv.HideSelection = false;
        lv.Location = new System.Drawing.Point(0, 0);
        lv.TabIndex = 0;
        lv.View = System.Windows.Forms.View.Details;
        lv.AllowColumnReorder = true;

        this.Controls.Add(lv);

        lv.MultiSelect = true;

        ColumnHeader ch = new ColumnHeader();
        ch.Name = "Foo";
        ch.Text = "Foo";
        ch.Width = 40;
        ch.TextAlign = HorizontalAlignment.Left;

        lv.Columns.Add(ch);

        ColumnHeader ch2 = new ColumnHeader();
        ch.Name = "Bar";
        ch.Text = "Bar";
        ch.Width = 40;
        ch.TextAlign = HorizontalAlignment.Left;

        lv.Columns.Add(ch2);

        lv.BeginUpdate();

        for (int i = 0; i < 3; i++)
        {


            ListViewItem lvi = new ListViewItem("1", "2");

            lvi.BackColor = Color.Black;
            lvi.ForeColor = Color.White;

            lv.Items.Add(lvi);
        }
        lv.EndUpdate();
    }
}
War es hilfreich?

Lösung

Ah! Ich sehe jetzt:}

Sie wollen Hacky? Ich präsentiere euch die folgende:

    ...
    lv.OwnerDraw = true;
    lv.DrawItem += new DrawListViewItemEventHandler( lv_DrawItem );
    ...

void lv_DrawItem( object sender, DrawListViewItemEventArgs e )
{
    Rectangle foo = e.Bounds;
    foo.Offset( -10, 0 );
    e.Graphics.FillRectangle( new SolidBrush( e.Item.BackColor ), foo );
    e.DrawDefault = true;
}

Für einen einfalls - und nicht weniger hacky - Ansatz, könnten Sie versuchen, das Hintergrundbild des Listview verwendet;)

Andere Tipps

(Vor dem Bearbeiten ...)

Ich habe gerade versucht, die Backcolor auf einem System.Windows.Forms.ListView Einstellung, und die Farbe wird über die Steuerung in Ordnung (mit und ohne Bilder).

angewandt

Sind Sie benutzerdefinierte Malerei zu tun überhaupt?

Ok Ich füge einige zusätzliche Lösung Noten. Wenn Sie die Lösung verwenden oben Sie auch einen Draw-Handler für die Spaltenüberschriften eingelegt werden muss, sonst werden sie nicht malen. Das ausgewählte Element Rechteck sieht auch komisch, so dass Sie für den in der lv_DrawItem Funktion und implementieren eine ähnliche Lösung zu überprüfen, werden wollen. Denken Sie daran, dass Markierung wird auf der Systemebene gewählt und nicht in Ihrer Anwendung.

Besseren Listview (und kostenlos bessere Listview Express ) erlaubt) Hintergrundbild mit verschiedenen Ausrichtungseinstellungen (zentriert, gekachelt, gestreckt, fit, fangen Sie Rand / Ecke zu setzen. Alpha-Transparenz wird ebenfalls unterstützt:

eingeben Bild Beschreibung hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top