Sie sind auf Seite 1von 5

E:\Myfiles\VBSamples\VBSamples\WinformsSamples\DrawUserControl\Scoreboard\DigitalScoreBoard.

vb
'CopyrightMicrosoftCorporation.AllRightsReserved.
'Thiscodereleasedunderthetermsofthe
'MicrosoftPublicLicense(MSPL,http://opensource.org/licenses/mspl.html.)
'
'Copyright(c)MicrosoftCorporation.Allrightsreserved.
ImportsSystem.Drawing.Drawing2D
PublicClassDigitalScoreBoard
#Region"VariablesandEnumerations"
PrivatenumberCountAsInteger=10
PrivatehasOutlineAsBoolean=True
PrivateoutlineColorMemberAsSystem.Drawing.Color=Color.Black
PrivatefillColorAsSystem.Drawing.Color=Color.Black
PrivatetotalScoreAsLong=0
PrivateshowLeadingZerosAsBoolean=True
PrivatenumberSpacingAsSpaceSize=SpaceSize.Medium
PrivatenumberWidthAsDouble
PrivateblockSizeAsDouble
PrivateeAsPaintEventArgs=Nothing
'Enumerationforeachsettingofthenumberspacing.
PublicEnumSpaceSizeAsInteger
Small=16
Medium=18
Large=20
EndEnum
#EndRegion
#Region"ControlProperties"
PublicPropertyOutline()AsBoolean
Get
ReturnhasOutline
EndGet
Set(ByValvalueAsBoolean)
hasOutline=value
Me.Invalidate()
EndSet
EndProperty
PublicPropertySpacing()AsSpaceSize
Get
ReturnnumberSpacing
EndGet
Set(ByValvalueAsSpaceSize)
numberSpacing=value
Me.Invalidate()
EndSet
EndProperty
PublicPropertyDigits()AsInteger
Get
ReturnnumberCount
EndGet
Set(ByValvalueAsInteger)
Ifvalue>17Then
numberCount=17
ElseIfvalue<1Then
numberCount=1
Else
numberCount=value
EndIf
Me.Invalidate()
EndSet
EndProperty
PublicPropertyOutlineColor()AsSystem.Drawing.Color
Get

E:\Myfiles\VBSamples\VBSamples\WinformsSamples\DrawUserControl\Scoreboard\DigitalScoreBoard.vb
ReturnoutlineColorMember
EndGet
Set(ByValvalueAsSystem.Drawing.Color)
outlineColorMember=value
Me.Invalidate()
EndSet
EndProperty
PublicPropertyNumberColor()AsSystem.Drawing.Color
Get
ReturnfillColor
EndGet
Set(ByValvalueAsSystem.Drawing.Color)
fillColor=value
Me.Invalidate()
EndSet
EndProperty
PublicPropertyScore()AsLong
Get
ReturntotalScore
EndGet
Set(ByValvalueAsLong)
IfMath.Log10(value)+1>17Then
totalScore=99999999999999999
Else
totalScore=value
EndIf
Me.Invalidate()
EndSet
EndProperty
PublicPropertyLeadingZeros()AsBoolean
Get
ReturnshowLeadingZeros
EndGet
Set(ByValvalueAsBoolean)
showLeadingZeros=value
Me.Invalidate()
EndSet
EndProperty
#EndRegion
#Region"DrawingFunctions"
'Drawsthescoreonthescoreboard.
PrivateSubDisplayScore()
DimtempScoreAsLong
DimpositionAsInteger=numberCount1
IfMath.Floor(Math.Log10(totalScore)+1)>numberCountThen
tempScore=CLng(10^numberCount1)
totalScore=tempScore
ElseIftotalScore<0Then
tempScore=0
totalScore=0
Else
tempScore=totalScore
EndIf
IftempScore=0Then
DrawNumber(0,position)
position=1
Else
WhiletempScore>0
DrawNumber(CInt(tempScoreMod10),position)
tempScore=CLng(Math.Floor(tempScore/10))
position=1
EndWhile
EndIf

E:\Myfiles\VBSamples\VBSamples\WinformsSamples\DrawUserControl\Scoreboard\DigitalScoreBoard.vb
IfshowLeadingZerosThen
Whileposition>=0
DrawNumber(0,position)
position=1
EndWhile
EndIf
EndSub
'Defineswhattopaintwhenthecontrolneedtoberepainted.
ProtectedOverridesSubOnPaint(ByValeaAsSystem.Windows.Forms.PaintEventArgs)
numberWidth=Me.Width/numberCount
blockSize=numberWidth/numberSpacing
IfMe.Height/24<blockSizeThen
blockSize=Me.Height/24
EndIf
e=ea
DisplayScore()
EndSub
'Drawsanumberinaspecificpositiononthescoreboard.
PrivateSubDrawNumber(ByValnumberAsInteger,ByValpositionAsInteger)
SelectCasenumber
Case0
DrawZero(position)
ExitSelect
Case1
DrawOne(position)
ExitSelect
Case2
DrawTwo(position)
ExitSelect
Case3
DrawThree(position)
ExitSelect
Case4
DrawFour(position)
ExitSelect
Case5
DrawFive(position)
ExitSelect
Case6
DrawSix(position)
ExitSelect
Case7
DrawSeven(position)
ExitSelect
Case8
DrawEight(position)
ExitSelect
Case9
DrawNine(position)
ExitSelect
CaseElse
DrawZero(position)
EndSelect
EndSub
'Drawsazeroonthescoreboardinthespecifiedposition.
PrivateSubDrawZero(ByValpositionAsInteger)
DrawVerticalLine(1+numberSpacing*position,2,1,0)
DrawVerticalLine(1+numberSpacing*position,12,1,2)
DrawHorizontalLine(2+numberSpacing*position,1,0,1)
DrawHorizontalLine(2+numberSpacing*position,21,0,3)
DrawVerticalLine(11+numberSpacing*position,2,1,0)

E:\Myfiles\VBSamples\VBSamples\WinformsSamples\DrawUserControl\Scoreboard\DigitalScoreBoard.vb
DrawVerticalLine(11+numberSpacing*position,12,1,2)
EndSub
'Drawsaoneonthescoreboardinthespecifiedposition.
PrivateSubDrawOne(ByValpositionAsInteger)
DrawVerticalLine(11+numberSpacing*position,2,1,0)
DrawVerticalLine(11+numberSpacing*position,12,1,2)
EndSub
'Drawsatwoonthescoreboardinthespecifiedposition.
PrivateSubDrawTwo(ByValpositionAsInteger)
DrawVerticalLine(1+numberSpacing*position,12,1,2)
DrawHorizontalLine(2+numberSpacing*position,1,0,1)
DrawHorizontalLine(2+numberSpacing*position,11,0,1)
DrawHorizontalLine(2+numberSpacing*position,21,0,3)
DrawVerticalLine(11+numberSpacing*position,2,1,0)
EndSub
'Drawsathreeonthescoreboardinthespecifiedposition.
PrivateSubDrawThree(ByValpositionAsInteger)
DrawHorizontalLine(2+numberSpacing*position,1,0,1)
DrawHorizontalLine(2+numberSpacing*position,11,0,1)
DrawHorizontalLine(2+numberSpacing*position,21,0,3)
DrawVerticalLine(11+numberSpacing*position,2,1,0)
DrawVerticalLine(11+numberSpacing*position,12,1,2)
EndSub
'Drawsafouronthescoreboardinthespecifiedposition.
PrivateSubDrawFour(ByValpositionAsInteger)
DrawVerticalLine(1+numberSpacing*position,2,1,0)
DrawHorizontalLine(2+numberSpacing*position,11,0,1)
DrawVerticalLine(11+numberSpacing*position,2,1,0)
DrawVerticalLine(11+numberSpacing*position,12,1,2)
EndSub
'Drawsafiveonthescoreboardinthespecifiedposition.
PrivateSubDrawFive(ByValpositionAsInteger)
DrawVerticalLine(1+numberSpacing*position,2,1,0)
DrawHorizontalLine(2+numberSpacing*position,1,0,1)
DrawHorizontalLine(2+numberSpacing*position,11,0,1)
DrawHorizontalLine(2+numberSpacing*position,21,0,3)
DrawVerticalLine(11+numberSpacing*position,12,1,2)
EndSub
'Drawsasixonthescoreboardinthespecifiedposition.
PrivateSubDrawSix(ByValpositionAsInteger)
DrawVerticalLine(1+numberSpacing*position,2,1,0)
DrawVerticalLine(1+numberSpacing*position,12,1,2)
DrawHorizontalLine(2+numberSpacing*position,1,0,1)
DrawHorizontalLine(2+numberSpacing*position,11,0,1)
DrawHorizontalLine(2+numberSpacing*position,21,0,3)
DrawVerticalLine(11+numberSpacing*position,12,1,2)
EndSub
'Drawsasevenonthescoreboardinthespecifiedposition.
PrivateSubDrawSeven(ByValpositionAsInteger)
DrawHorizontalLine(2+numberSpacing*position,1,0,1)
DrawVerticalLine(11+numberSpacing*position,2,1,0)
DrawVerticalLine(11+numberSpacing*position,12,1,2)
EndSub
'Drawsaeightonthescoreboardinthespecifiedposition.
PrivateSubDrawEight(ByValpositionAsInteger)
DrawVerticalLine(1+numberSpacing*position,2,1,0)
DrawVerticalLine(1+numberSpacing*position,12,1,2)
DrawHorizontalLine(2+numberSpacing*position,1,0,1)
DrawHorizontalLine(2+numberSpacing*position,11,0,1)
DrawHorizontalLine(2+numberSpacing*position,21,0,3)
DrawVerticalLine(11+numberSpacing*position,2,1,0)
DrawVerticalLine(11+numberSpacing*position,12,1,2)

E:\Myfiles\VBSamples\VBSamples\WinformsSamples\DrawUserControl\Scoreboard\DigitalScoreBoard.vb

EndSub
'Drawsanineonthescoreboardinthespecifiedposition.
PrivateSubDrawNine(ByValpositionAsInteger)
DrawVerticalLine(1+numberSpacing*position,2,1,0)
DrawHorizontalLine(2+numberSpacing*position,1,0,1)
DrawHorizontalLine(2+numberSpacing*position,11,0,1)
DrawHorizontalLine(2+numberSpacing*position,21,0,3)
DrawVerticalLine(11+numberSpacing*position,2,1,0)
DrawVerticalLine(11+numberSpacing*position,12,1,2)
EndSub
PrivateSubDrawVerticalLine(ByValxAsInteger,ByValyAsInteger,ByValdeltaXAsInteger,ByVal
deltaYAsInteger)
DimrectAsSystem.Drawing.Rectangle=e.ClipRectangle
DimgAsSystem.Drawing.Graphics=e.Graphics
DimpathAsSystem.Drawing.Drawing2D.GraphicsPath=NewSystem.Drawing.Drawing2D.GraphicsPath()
Dimpoints()AsPoint={NewPoint(CInt(blockSize*(0+x)+deltaX),CInt(blockSize*(1+y)
+deltaY)),NewPoint(CInt(blockSize*(1+x)+deltaX),CInt(blockSize*(0+y)+deltaY)),New
Point(CInt(blockSize*(2+x)+deltaX),CInt(blockSize*(1+y)+deltaY)),NewPoint(CInt
(blockSize*(2+x)+deltaX),CInt(blockSize*(9+y)+deltaY)),NewPoint(CInt(blockSize*(1+
x)+deltaX),CInt(blockSize*(10+y)+deltaY)),NewPoint(CInt(blockSize*(0+x)+deltaX),
CInt(blockSize*(9+y)+deltaY))}
path.AddPolygon(points)
g.FillPath(NewPen(fillColor).Brush,path)
IfhasOutlineThen
g.DrawPath(NewPen(OutlineColor),path)
EndIf
EndSub
PrivateSubDrawHorizontalLine(ByValxAsInteger,ByValyAsInteger,ByValdeltaXAsInteger,
ByValdeltaYAsInteger)
DimrectAsSystem.Drawing.Rectangle=e.ClipRectangle
DimgAsSystem.Drawing.Graphics=e.Graphics
DimpathAsSystem.Drawing.Drawing2D.GraphicsPath=NewSystem.Drawing.Drawing2D.GraphicsPath()
Dimpoints()AsPoint={NewPoint(CInt(blockSize*(0+x)+deltaX),CInt(blockSize*(1+y)
+deltaY)),NewPoint(CInt(blockSize*(1+x)+deltaX),CInt(blockSize*(0+y)+deltaY)),New
Point(CInt(blockSize*(9+x)+deltaX),CInt(blockSize*(0+y)+deltaY)),NewPoint(CInt
(blockSize*(10+x)+deltaX),CInt(blockSize*(1+y)+deltaY)),NewPoint(CInt(blockSize*(9
+x)+deltaX),CInt(blockSize*(2+y)+deltaY)),NewPoint(CInt(blockSize*(1+x)+deltaX),
CInt(blockSize*(2+y)+deltaY))}
path.AddPolygon(points)
g.FillPath(NewPen(fillColor).Brush,path)
IfhasOutlineThen
g.DrawPath(NewPen(OutlineColor),path)
EndIf
EndSub
#EndRegion
EndClass

Das könnte Ihnen auch gefallen