簡體   English   中英

Listview背景繪圖問題C#Winform

[英]Listview background drawing problem C# Winform

我對Listview有一點問題。

我可以用listview項加載它,但是當我設置背景顏色時它不會一直繪制到行的左側[listViewItems加載ListViewSubItems來制作網格視圖,只有第一列顯示錯誤]。 有一條窄條不塗漆。 如果我有一個行標題,那個條帶的寬度與行標題大致相同。

如果你想到可以做些什么來制作背景畫,我很樂意聽到它。

現在只是為了嘗試一個新的想法,我為第一個解決方案提供十票獎勵,這仍然讓我使用這個糟糕的偽網格視圖的可怕構造。 [我喜歡遺留代碼。]

編輯:

這是一個展示問題的示例。

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();
    }
}

啊! 我現在明白了 :}

你想要hacky? 我告訴你以下內容:

    ...
    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;
}

對於更具創造性 - 而且不少於hacky - 的方法,您可以嘗試使用ListView的背景圖像;)

(在編輯之前......)

我剛剛嘗試在System.Windows.Forms.ListView上設置BackColor,並且顏色在控件上應用得很好(有和沒有圖像)。

你在做任何自定義繪畫嗎?

更好的ListView (和免費的Better ListView Express )允許設置具有各種對齊設置的背景圖像(居中,平鋪,拉伸,合身,對齊邊框/角落)。 還支持Alpha透明度:

在此輸入圖像描述

好的我正在添加一些額外的解決方案說明。 如果使用上面的解決方案,還需要為列標題插入繪制處理程序,否則它們將不會繪制。 選定的項目矩形看起來也很有趣,因此您需要在lv_DrawItem函數中檢查它並實現類似的解決方案。 請記住,突出顯示是在系統級別而不是在您的應用程序中選擇的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM