如何在formload drawitem上调用事件

时间:2015-12-03 11:20:56

标签: c# winforms listbox ondrawitem

我正在使用此代码将图像放入列表框但文本未显示。当我点击列表然后显示。有什么问题?

form_load()
{
   listbox1.Items.Add("string");
   listbox1.DrawMode = DrawMode.OwnerDrawVariable;
}

private void listbox1_DrawItem(object sender, DrawItemEventArgs e)
{
   ListBox lst = sender as ListBox;
   e.Graphics.DrawImage(imageList1.Images[0], 0, 0, 10, 10);
   e.Graphics.DrawString(lst.Text, this.Font,SystemBrushes.ControlDark, 11, 0);
}

1 个答案:

答案 0 :(得分:2)

好吧,看起来你正在错误地绘制你的物品。正在为列表框中的每个项目调用DrawItem事件,但您在相同位置始终绘制相同文本。您应该使用e.Bounds来确定每个项目的位置。如果您需要一些非标准尺寸,也可以处理MeasureItem事件来为每个项目设置自定义边界。

同样lst.Text在这里没有多大意义,它应该是基于e.Index绘制的当前项目的文本。

因此,部分代码绘制字符串可能类似于:

e.Graphics.DrawString(lst.GetItemText(lst.Items[e.Index]), 
                      this.Font, SystemBrushes.ControlDark, e.Bounds.Left, e.Bounds.Top);

您也可以在MSDN找到有用的example