Как вызвать событие в форме загрузки

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

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 ответ

Решение

Ну, похоже, вы неправильно рисуете свои предметы. 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.

Другие вопросы по тегам