我正在尝试绘制tablelayoutpanel对象的行。我为cellpaint事件添加了一个处理程序,但我甚至无法让调试器捕获此事件。是否还需要在tablelayoutpanel上配置其他内容,以便我可以自定义绘制我的单元格?
我尝试过强制调用使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
我使用this other thread作为参考。
编辑:我的tablelayoutpanel单元格中的对象未设置为自动调整大小。当我启用自动调整大小时,我发现cellpaint事件会引发并且我的对象在视觉上显示为我所期望的。我认为这种行为是设计的。
答案 0 :(得分:3)
为了在运行时加载UserControl,我将创建一个按钮来触发它。我可以在Form_Load上执行此操作但是对于此示例,我将在Button_Click上进行此操作。
我有以下文件:
在我的Form1.vb
我有一个TableLayoutPanel(用于调整控件的大小)。在我的TableLayoutPanel的第一行中,我有一个按钮,通知用户加载用户控件"。第二行是我的UserControl的占位符。
以下代码只是在我创建的TableLayoutPanel
中添加了UserControl1Public 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。我在这个UserControl中创建了一个TableLayoutPanel并将其停靠(填充)。这使得TableLayoutPanel的大小调整为UserControl的大小。我创建了三行,因为你的例子中有三行。
这是我需要绘制UserControl> TableLayoutPanels>行的唯一代码。
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
当我执行我的程序时,Form1会弹出:
然后当我按下加载按钮时,会发生这种情况:
因此,当我点击我的按钮时,会创建一个新的用户控件实例,使其在UserControl中执行Cell_Paint。
希望这可以解决问题!