Кто-нибудь знает, почему команда Listbox1.Refresh() не может запускать SubBox1_DrawItem каждый раз?listbox item forecolor change
В Microsoft Visual Basic 2010 список имеет свойство forcolor и backcolor. Эти свойства изменяют цвета forcolour и backcolor для всех элементов в списке. По умолчанию нет свойства для forecolor и backcolor отдельного элемента в списке, я знаю, что есть в представлении списка, но я все равно хотел бы использовать список. Я пытаюсь изменить свойства forecolor и backcolor отдельных элементов в списке. Для этого необходимо, чтобы атрибут drawbode списка был использован с атрибутом drawmode списка, установленным в OwnerDrawFixed. Затем, используя цвет кисти вместе с графикой, можно изменить цвет forecolor или backcolor. Я видел и приводил примеры того, как это сделать для выбранного в данный момент элемента. Например, от ehow's website. Тем, что я устал делать, это изменить цвет элемента litsbox, поскольку он добавляется в зависимости от переменной.
Вот мой код:
Private Sub listbox_add()
Me.ListBox1.Items.Add(listbox_text(list_num)) ' adds the line to the list box
add_item_colour = True
ListBox1.Refresh()
End Sub
Private Sub ListBox1_DrawItem(ByVal sender As Object, ByVal e As System.Windows.Forms.DrawItemEventArgs) Handles ListBox1.DrawItem
Dim myBrush As Brush = Brushes.Black
e.DrawBackground()
If add_item_colour = True Then
If blue_message = True Then
myBrush = Brushes.Blue
Else
myBrush = Brushes.Black
End If
e.Graphics.DrawString(ListBox1.Items.Item(list_num), ListBox1.Font, myBrush, _
New RectangleF(e.Bounds.X, e.Bounds.Y, e.Bounds.Width, e.Bounds.Height))
add_item_colour = False
End If
e.DrawFocusRectangle()
End Sub
listbox_text является массив строк, который хранит строку добавляемого list_num представляет собой целое число, которое увеличивает при добавлении новых элементов в ListBox и blue_message булева что это правда, когда я хочу синее сообщение и ложь, когда я этого не сделаю.
Проблема, с которой я, кажется, сталкиваюсь, заключается в том, что команда Listbox1.Refresh(), кажется, не запускает SubBox1_DrawItem при каждом вызове. Я нашел это, используя тормозные точки. Кто-нибудь знает, почему это может быть так и как я могу это исправить?
Спасибо, любая помощь по этому поводу будет очень признательна.
Спасибо за ваш ответ, я, безусловно, дать ваш код попробовать. Однако я не упомянул о том, что этот listbox_add sub будет вызван только из нового потока, но он использует метод New System.Threading.Thread (AddressOf и Thread.Start() не фоновый рабочий, я не упоминал это потому, что это не было релевантно. – josh
Также я пытаюсь достичь ситуации, когда цвет изменяется при добавлении элемента, поэтому переменная list_num отслеживает ранее добавленную. Простите меня, если я ошибаюсь но похоже, что ваш код зависит от выбранного элемента списка. – josh
Да, вы правы, код, который я предоставил, - это всего лишь пример обновления списка при использовании фонового работника. Вам обязательно нужно внести изменения в соответствии с вашими требованиями. –