在类中使用Paint事件

时间:2015-11-13 16:43:08

标签: vb.net class visual-studio-2012 event-handling

我试图在一个可以绘制扑克牌的类中创建一个函数。我还在掌握Winforms中的绘图,所以请耐心等待。

到目前为止,基本课程如下:

Public Class Card
    Public Suit As Char
    Public Value As String
    Public Sub New(_Suit As Char, _Value As String)
        Suit = _Suit
        Value = _Value
    End Sub
    Public Sub Draw()

    End Sub
End Class

在Card类中,我想创建一个绘制白色矩形的子绘图,添加数字,套装符号等。我已经得到了将绘制白色矩形的代码,但我没有&#39 ; t知道如何使其适应在课堂内使用。我只有这个事件处理程序:

Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
    Dim p As Pen
    p = New Pen(Color.Black, 2)
    Dim rekt = New Rectangle(New Point(10, 10), New Size(90, 126))
    Me.CreateGraphics.DrawRectangle(p, rekt)
    CreateGraphics.FillRectangle(Brushes.White, rekt)
End Sub

这会在加载窗体时自动创建一个白色矩形。当我将此事件处理程序中的代码C& P转换为Draw函数时,它不起作用,因为CreateGraphics不是Card类的成员。

是否有一个简单的解决方法,或者我是否应该从根本上接近这个?

1 个答案:

答案 0 :(得分:1)

从图像列表中load pre-done images会容易得多,因此适当的图像可能只是另一个Card属性。否则你可以进入绘制心形和俱乐部形状(或更改字体以使用WebDings或可能是CardFace font或绘制套装符号的位图)之类的东西。

你的卡可以自己绘制,但你想使用Windows在paint事件中提供的Graphics对象:

myCard = New Card("Diamonds", 6)

Private Sub pb_Paint(sender As Object, e As PaintEventArgs) Handles pb.Paint
    myCard.Draw(e.Graphics)
End Sub

e是在paint事件中传递给您的PaintEventArgs。它是一个类,其中一个成员是Graphics对象。 Card.Draw()方法:

Public Sub Draw(g As Graphics)

    Dim br As Brush = Brushes.Black
    If Suit.ToLowerInvariant = "hearts" Or Suit.ToLowerInvariant = "diamonds" Then
        br = Brushes.Red
    End If

    Using p As New Pen(Color.Black, 2)
        Dim rekt = New Rectangle(New Point(10, 10), New Size(90, 126))
        g.DrawRectangle(p, rekt)
        g.FillRectangle(Brushes.White, rekt)

        Using f As New Font("Verdana", 16, FontStyle.Bold)
            g.DrawString(Rank.ToString & " " & Suit(0), f, br, New Point(12, 12))
        End Using
    End Using

End Sub

输出(非常粗糙!):

enter image description here

另请注意,我正在处理已创建的Pen。如果需要解释Suit(0)表示字符串的第一个字符。