【问题标题】:How to call event on formload drawitem如何在表单加载drawitem上调用事件
【发布时间】:2015-12-03 11:20:56
【问题描述】:

我正在使用此代码将图像放入列表框中,但文本未显示。当我单击列表时,它会显示。有什么问题?

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

【问题讨论】:

  • 确定form_load的拼写??

标签: c# winforms listbox ondrawitem


【解决方案1】:

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

另外lst.Text在这里也没什么意义,应该是当前要绘制的item的文本,基于e.Index

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

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

您还可以在 MSDN 上找到一些有用的 example

【讨论】:

    猜你喜欢
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多