tablelayoutpanel没有提升cellpaint事件

时间:2014-05-01 18:27:53

标签: vb.net tablelayoutpanel

我正在尝试绘制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事件会引发并且我的对象在视觉上显示为我所期望的。我认为这种行为是设计的。

Autosize cell object true vs false blocks cellpaint event

1 个答案:

答案 0 :(得分:3)

为了在运行时加载UserControl,我将创建一个按钮来触发它。我可以在Form_Load上执行此操作但是对于此示例,我将在Button_Click上进行此操作。

我有以下文件:

  • Form1.vb的
  • UserControl1.vb

Form1.vb的

在我的Form1.vb我有一个TableLayoutPanel(用于调整控件的大小)。在我的TableLayoutPanel的第一行中,我有一个按钮,通知用户加载用户控件"。第二行是我的UserControl的占位符。

Form1.vb

以下代码只是在我创建的TableLayoutPanel

中添加了UserControl1
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。我在这个UserControl中创建了一个TableLayoutPanel并将其停靠(填充)。这使得TableLayoutPanel的大小调整为UserControl的大小。我创建了三行,因为你的例子中有三行。

UserControl1.vb

这是我需要绘制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会弹出:

Form1_BeforeClick

然后当我按下加载按钮时,会发生这种情况:

Form1_AfterClick


因此,当我点击我的按钮时,会创建一个新的用户控件实例,使其在UserControl中执行Cell_Paint。

希望这可以解决问题!