我对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(); } }
moobaa.. 5
啊! 我现在明白了 :}
你想要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的背景图像;)
啊! 我现在明白了 :}
你想要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的背景图像;)