tablelayoutpanel не поднимает событие cellpaint
Я пытаюсь раскрасить ряды объекта tablelayoutpanel. Я добавил обработчик для события cellpaint, но я даже не могу заставить отладчик перехватить это событие. Есть ли что-то еще, что мне нужно настроить на табличной панели, чтобы я мог покрасить свои ячейки?
Я пробовал принудительный вызов, чтобы сделать недействительным при загрузке usercontrol, но это не помогло.
Вот мой код:
Private Sub TableLayoutPanel3_CellPaint(sender As Object, e As TableLayoutCellPaintEventArgs) Handles TableLayoutPanel3.CellPaint
Select Case e.Row
Case 1
e.Graphics.FillRectangle(Brushes.Orange, e.CellBounds)
Case 2
e.Graphics.FillRectangle(Brushes.Green, e.CellBounds)
Case 3
e.Graphics.FillRectangle(Brushes.Yellow, e.CellBounds)
End Select
End Sub
Я использовал эту другую тему в качестве ссылки.
Редактировать: объекты в ячейках моей табличной панели не были настроены на автоматический размер. Когда я включил авторазмер, я обнаружил, что событие cellpaint будет вызываться, и мой объект визуально отображался, как я и ожидал. Я предполагаю, что это поведение разработано.
1 ответ
Чтобы загрузить UserControl во время выполнения, я создам кнопку, чтобы вызвать это. Я мог бы сделать это на Form_Load, но для этого примера я сделаю это на Button_Click.
У меня есть следующие файлы:
- Form1.vb
- UserControl1.vb
Form1.vb
В моем Form1.vb
У меня есть TableLayoutPanel (используется для изменения размера элементов управления). В первой строке моего TableLayoutPanel у меня есть кнопка, которая уведомляет пользователя "Загрузить пользовательский элемент управления". Второй ряд - это место для моего UserControl.
Следующий код просто добавляет UserControl1, который я создал, в мой TableLayoutPanel
Public Class Form1
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim ucColors As New UserControl1 'Create a new instance of the UserControl
ucColors.Dock = DockStyle.Fill 'Make it dock to it's parent container (this tablelayoutpanel)
TableLayoutPanel1.Controls.Add(ucColors, 0, 1) 'Add the control to the tablelayoutpanel
End Sub
End Class
UserControl1.vb
Это мой UserControl1.vb. Я создал TableLayoutPanel в этом пользовательском элементе управления и закрепил его (заполните). Это заставляет TableLayoutPanel изменить размер до размера UserControl. Я создал три строки, потому что у вас было три строки в вашем примере.
Это единственный код, который мне нужен для рисования UserControl> TableLayoutPanels> Rows.
Public Class UserControl1
Private Sub TableLayoutPanel1_CellPaint(sender As Object, e As TableLayoutCellPaintEventArgs) Handles TableLayoutPanel1.CellPaint
Select Case e.Row
Case 0 'Row 1
e.Graphics.FillRectangle(Brushes.Orange, e.CellBounds)
Case 1 'Row 2
e.Graphics.FillRectangle(Brushes.Green, e.CellBounds)
Case 2 'Row 3
e.Graphics.FillRectangle(Brushes.Yellow, e.CellBounds)
End Select
End Sub
End Class
RunTime
Когда я выполняю свою программу, появляется Form1:
И тогда, когда я нажимаю кнопку Загрузить, это происходит:
Итак, когда я нажал на кнопку, был создан новый экземпляр пользовательского элемента управления, который заставил его выполнить Cell_Paint в UserControl.
Надеюсь, это прояснит ситуацию!