Как рисовать столбцы и строки listview из formload?
на данный момент я могу сделать это из отдельного события,
вот код, который я использую:
Private Sub ListView1_DrawSubItem(sender As Object, e As System.Windows.Forms.DrawListViewSubItemEventArgs) Handles ListView1.DrawSubItem With e.Graphics .DrawLines(New Pen(SystemColors.ButtonShadow), New Point() {New Point(e.Bounds.Left, e.Bounds.Top - 1), New Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top - 1), New Point(e.Bounds.Left + e.Bounds.Width, e.Bounds.Top + e.Bounds.Height), New Point(e.Bounds.Left, e.Bounds.Top + e.Bounds.Height)}) End With e.DrawText() End Sub
Причина, по которой я пытаюсь перенести это на событие form_load, заключается в том, что каждый раз, когда я вызываю свое событие listview1.click, listview продолжает мигать. Однако я считаю, что это может прекратиться, если это было нарисовано в listview постоянно, а не быть его собственным событием, которое рисуется каждый раз.
Что я уже пробовал:
Я попробовал использовать creategraphics
вот код, который я попробовал:
With CreateGraphics() .DrawLines(New Pen(SystemColors.ButtonShadow), New Point() {New Point(ListView1.Bounds.Left, ListView1.Bounds.Top - 1), New Point(ListView1.Bounds.Left + ListView1.Bounds.Width, ListView1.Bounds.Top - 1), New Point(ListView1.Bounds.Left + ListView1.Bounds.Width, ListView1.Bounds.Top + ListView1.Bounds.Height), New Point(ListView1.Bounds.Left, ListView1.Bounds.Top + ListView1.Bounds.Height)}) End With
но это не сработало.
Richard Deeming
Вы пытаетесь решить не ту проблему. Не пытайтесь переместить код чертежа в событие загрузки - это никогда не сработает. Вместо этого попробуйте решить проблему мигания.
Вероятно, вам нужно включить двойную буферизацию:
Как уменьшить мерцание графики с помощью двойной буферизации для форм и элементов управления[^]
Member 11856456
Это похоже на то, что это решило бы мою проблему, единственная проблема заключается в том, что он показывает, как это сделать в C#, а не vb.net-да. Как бы я устроил это для a vb.net заявление?
Richard Deeming
Эти два блока кода достаточно просты для перевода:
DoubleBuffered = Trueи:
SetStyle(ControlStyles.OptimizedDoubleBuffer, True)
Member 11856456
Я просто попробовал это в 3 разных местах моего кода, и ни один из них не ответил на мерцание. может быть, я смотрю на это неправильно?
Member 11856456
Ричард, я не смог заставить двойной буфер работать, однако я нашел код, который перестает мерцать. Поскольку вы были в этом уже некоторое время, и это короткий код, не могли бы вы объяснить, почему он перестает мерцать?