2015-12-03 2 views
0

Я использую этот код, чтобы поместить изображение в список, но текст не отображается. Когда я нажимаю на список, он показывает. В чем проблема ?Как вызвать событие на formload drawitem

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

Уверенный о правописании form_load ?? – TaW

ответ

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

Также вы можете найти полезную некоторые example в MSDN.

+0

Спасибо! работа @ Энди Корнеев – phpnet