[英]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.