Я пытаюсь нарисовать границу на поверхности суб-классифицироваться ListBox, я получить довольно результаты:
Но если Я прокручиваю контроль, это то, что происходит:
ВОПРОС
В C# или еще VB.Net, как я мог правильно нарисовать границу по краям управления, как картина одного?
(уточнить: не границы по каждому пункту)
КОД
Это то, что я делаю:
public class mylistbox : inherits listbox
Public Sub New()
MyBase.DrawMode = Windows.Forms.DrawMode.OwnerDrawVariable
End Sub
Private Sub DrawBorder(ByVal g As Graphics)
ControlPaint.DrawBorder(g, Me.ClientRectangle,
BorderColor, ButtonBorderStyle)
End Sub
Private Sub MyBase_DrawItem(ByVal sender As Object, ByVal e As DrawItemEventArgs) _
Handles MyBase.DrawItem
Me.ColorizeItems(e)
End Sub
Private Sub ColorizeItems(ByVal e As DrawItemEventArgs)
' non important code here...
Me.DrawBorder(Graphics.FromHwnd(Me.Handle))
End Sub
end class
Проблема заключается в том, что метод DrawItem вызывается несколько раз, в этом случае каждый раз, когда вы прокручиваете .NET, перерисовываете элемент управления. Почему бы вам не попробовать установить свойство color color в списке. –
Почему вы перерисовываете границу * control *, когда ее просят нарисовать * элемент *? Код ColorizeItems, похоже, виноват. Он также должен использовать графический объект, доступный через 'DrawItemEventArgs'. – Plutonix
@Esteban Falcón WinForms ListBox не имеет свойства цвета границы, может быть, вы говорите о WPF. – ElektroStudios