我试图在一个可以绘制扑克牌的类中创建一个函数。我还在掌握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类的成员。
是否有一个简单的解决方法,或者我是否应该从根本上接近这个?
答案 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
输出(非常粗糙!):
另请注意,我正在处理已创建的Pen
。如果需要解释Suit(0)
表示字符串的第一个字符。