将grapic.drawline添加到New Panel

时间:2016-06-07 14:17:56

标签: vb.net

如何在我刚刚在代码中创建的Panel上绘制一条线?我正在使用我自己的名为MyPanel的类面板,它与常规面板之间的唯一区别是我给它一个边框。在我的代码中,这就是我得到的:

Dim newPanel as New MyPanel

dim graphicPanel as graphic = newPanel.createGraphic
graphicPanel.drawline(pens.Black, 20, 65,20,65)

basePanel.controls.add(newPanel)

该程序将添加其中几个面板(每个面板可能有点不同,我希望能够在它们上绘制一些线条,我可以稍后修改,或者只是清除并制作新的。

由于我在代码中创建此面板,因此我无法访问_Paint事件,我认为这是上述代码工作的原因?任何想法?

2 个答案:

答案 0 :(得分:2)

一旦面板无效,CreateGraphics将始终被“擦除”。 如果您使用自己的MyPanel类,那么您可以覆盖它的onPaint方法并在该MyPanel类中绘制该行(如果所有MyPanel都应该具有该行)。

另外作为一个注释,如果您在代码中创建一个控件,您仍然可以访问它的所有事件。例如,在VB.NET中,您可以使用关键字WithEvents将其声明为全局,或者您可以使用AddHandler将eventhandler添加到您的控件中。

示例:

Class MyPanel
Inherits Panel
Protected Overrides Sub OnPaint(e As PaintEventArgs)
    MyBase.OnPaint(e)
    e.Graphics.DrawLine(System.Drawing.Pens.Black, 0, 0, Me.Width, Me.Height)
    e.Graphics.DrawLine(System.Drawing.Pens.Black, Me.Width, 0, 0, Me.Height)
End Sub
End Class

此示例将在面板中绘制2条对角线。

//在

中编辑了一个示例代码

此致

答案 1 :(得分:0)

您的线条未显示,因为只要重新绘制面板,就不会包含该线条。

当然您可以访问面板的Paint事件,您可以使用https://app.sendgrid.com/settings/api_keys语句来订阅动态创建的控件事件。

Private Sub CreatePanel()
    Dim newPanel As New MyPanel
    AddHandler newPanel.Paint, AddressOf MyPanel_Paint
    basePanel.Controls.Add(newPanel)
End Sub

Private Sub MyPanel_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs)
    e.Graphics.DrawLine(Pens.Black, 20, 65, 20, 65)
End Sub