📄 formmain.vb
字号:
'如果上次画的是曲线,则擦掉上次所画的开放曲线
ElseIf UBound(p) = 0 Then
g.DrawLine(pn2, p(UBound(p)).X, p(UBound(p)).Y, p(UBound(p)).X + 1, p(UBound(p)).Y)
'如果数组p中只有一个点坐标,则擦掉上次所画的点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn2, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则擦掉上次所画的直线
End If
Dim pn As Pen = New Pen(lbColor.BackColor)
ReDim Preserve p(UBound(p) + 1)
'重定义动态数组p,用以依次记录各点坐标
p(UBound(p)) = p2
'保存当前坐标
If UBound(p) = 0 Then
g.DrawLine(pn, p2.X, p2.Y, p2.X + 1, p2.Y)
'如果数组p中只有一个点坐标,则在该坐标处画点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则将这两个坐标连成直线
Else
g.DrawCurve(pn, p)
'如果数组p中已经有两个以上的点坐标,则以数组p中的点为基准画开放曲线
End If
Case 11
Dim pn2 As Pen = New Pen(Color.White)
'定义白色画笔作为擦除上次所画曲线的橡皮擦
If UBound(p) > 1 Then
g.DrawClosedCurve(pn2, p)
'如果上次画的是曲线,则擦掉上次所画的封闭曲线
ElseIf UBound(p) = 0 Then
g.DrawLine(pn2, p(UBound(p)).X, p(UBound(p)).Y, p(UBound(p)).X + 1, p(UBound(p)).Y)
'如果数组p中只有一个点坐标,则擦掉上次所画的点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn2, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则擦掉上次所画的直线
End If
Dim pn As Pen = New Pen(lbColor.BackColor)
ReDim Preserve p(UBound(p) + 1)
'重定义动态数组p,用以依次记录各点坐标
p(UBound(p)) = p2
'保存当前坐标
If UBound(p) = 0 Then
g.DrawLine(pn, p2.X, p2.Y, p2.X + 1, p2.Y)
'如果数组p中只有一个点坐标,则在该坐标处画点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则将这两个坐标连成直线
Else
g.DrawClosedCurve(pn, p)
'如果数组p中已经有两个以上的点坐标,则以数组p中的点为基准画封闭曲线
End If
Case 12
Dim pn2 As Pen = New Pen(Color.White)
If UBound(p) > 1 Then
Dim br As SolidBrush = New SolidBrush(Color.White)
g.FillClosedCurve(br, p)
'如果上次画的是曲线,则擦掉上次所画的实心封闭曲线
ElseIf UBound(p) = 0 Then
g.DrawLine(pn2, p(UBound(p)).X, p(UBound(p)).Y, p(UBound(p)).X + 1, p(UBound(p)).Y)
'如果数组p中只有一个点坐标,则擦掉上次所画的点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn2, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则擦掉上次所画的直线
End If
Dim pn As Pen = New Pen(lbColor.BackColor)
ReDim Preserve p(UBound(p) + 1)
'重定义动态数组p,用以依次记录各点坐标
p(UBound(p)) = p2
'保存当前坐标
If UBound(p) = 0 Then
g.DrawLine(pn, p2.X, p2.Y, p2.X + 1, p2.Y)
'如果数组p中只有一个点坐标,则在该坐标处画点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则将这两个坐标连成直线
Else
Dim br As SolidBrush = New SolidBrush(lbColor.BackColor)
g.FillClosedCurve(br, p)
'如果数组p中已经有两个以上的点坐标,则以数组p中的点为基准画实心封闭曲线
End If
Case 13
Dim pn2 As Pen = New Pen(Color.White)
If UBound(p) > 1 Then
Dim br As SolidBrush = New SolidBrush(Color.White)
g.FillClosedCurve(br, p)
'如果上次画的是曲线,则擦掉上次所画的实心封闭曲线
ElseIf UBound(p) = 0 Then
g.DrawLine(pn2, p(UBound(p)).X, p(UBound(p)).Y, p(UBound(p)).X + 1, p(UBound(p)).Y)
'如果数组p中只有一个点坐标,则擦掉上次所画的点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn2, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则擦掉上次所画的直线
End If
Dim pn As Pen = New Pen(lbColor.BackColor)
ReDim Preserve p(UBound(p) + 1)
'重定义动态数组p,用以依次记录各点坐标
p(UBound(p)) = p2
'保存当前坐标
If UBound(p) = 0 Then
g.DrawLine(pn, p2.X, p2.Y, p2.X + 1, p2.Y)
'如果数组p中只有一个点坐标,则在该坐标处画点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则将这两个坐标连成直线
Else
Dim iStyle As Integer
If cbStyle.Text = "" Then
iStyle = 0
Else
iStyle = cbStyle.Items.IndexOf(cbStyle.Text)
End If
Dim br As HatchBrush = New HatchBrush(iStyle, lbLineColor.BackColor, lbFillColor.BackColor)
g.FillClosedCurve(br, p)
'如果数组p中已经有两个以上的点坐标,则以数组p中的点为基准画指定填充风格的封闭曲线
End If
Case 14
Dim pn2 As Pen = New Pen(Color.White)
If UBound(p) = 0 Then
g.DrawLine(pn2, p(UBound(p)).X, p(UBound(p)).Y, p(UBound(p)).X + 1, p(UBound(p)).Y)
'如果数组p中只有一个点坐标,则擦掉上次所画的点
End If
Dim pn As Pen = New Pen(lbColor.BackColor)
ReDim Preserve p(UBound(p) + 1)
'重定义动态数组p,用以依次记录各点坐标
p(UBound(p)) = p2
'保存当前坐标
If UBound(p) = 0 Then
g.DrawLine(pn, p2.X, p2.Y, p2.X + 1, p2.Y)
'如果数组p中只有一个点坐标,则在该坐标处画点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则将这两个坐标连成直线
Else
g.DrawLines(pn, p)
'如果数组p中已经有两个以上的点坐标,则以数组p中的点为顶点画折线
End If
Case 15
Dim pn2 As Pen = New Pen(Color.White)
If UBound(p) = 0 Then
g.DrawLine(pn2, p(UBound(p)).X, p(UBound(p)).Y, p(UBound(p)).X + 1, p(UBound(p)).Y)
'如果数组p中只有一个点坐标,则擦掉上次所画的点
ElseIf UBound(p) > 0 Then
g.DrawLine(pn2, p(UBound(p)).X, p(UBound(p)).Y, p(0).X, p(0).Y)
'如果数组p中有两个或两个以上点坐标,则擦掉上次封口的直线
End If
Dim pn As Pen = New Pen(lbColor.BackColor)
ReDim Preserve p(UBound(p) + 1)
'重定义动态数组p,用以依次记录各点坐标
p(UBound(p)) = p2
'保存当前坐标
If UBound(p) = 0 Then
g.DrawLine(pn, p2.X, p2.Y, p2.X + 1, p2.Y)
'如果数组p中只有一个点坐标,则在该坐标处画点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则将这两个坐标连成直线
Else
g.DrawPolygon(pn, p)
'如果数组p中已经有两个以上的点坐标,则以数组p中的点为顶点画多边形
End If
Case 16
Dim pn2 As Pen = New Pen(Color.White)
If UBound(p) > 1 Then
Dim br As SolidBrush = New SolidBrush(Color.White)
g.FillPolygon(br, p)
'如果上次画的是实心多边形,则擦掉上次所画的实心多边形
ElseIf UBound(p) = 0 Then
g.DrawLine(pn2, p(UBound(p)).X, p(UBound(p)).Y, p(UBound(p)).X + 1, p(UBound(p)).Y)
'如果数组p中只有一个点坐标,则擦掉上次所画的点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn2, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则擦掉上次所画的直线
End If
Dim pn As Pen = New Pen(lbColor.BackColor)
ReDim Preserve p(UBound(p) + 1)
'重定义动态数组p,用以依次记录各点坐标
p(UBound(p)) = p2
'保存当前坐标
If UBound(p) = 0 Then
g.DrawLine(pn, p2.X, p2.Y, p2.X + 1, p2.Y)
'如果数组p中只有一个点坐标,则在该坐标处画点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则将这两个坐标连成直线
Else
Dim br As SolidBrush = New SolidBrush(lbColor.BackColor)
g.FillPolygon(br, p)
'如果数组p中已经有两个以上的点坐标,则以数组p中的点为顶点画实心多边形
End If
Case 17
Dim pn2 As Pen = New Pen(Color.White)
If UBound(p) > 1 Then
Dim br As SolidBrush = New SolidBrush(Color.White)
g.FillClosedCurve(br, p)
'如果上次画的是曲线,则擦掉上次所画的实心封闭曲线
ElseIf UBound(p) = 0 Then
g.DrawLine(pn2, p(UBound(p)).X, p(UBound(p)).Y, p(UBound(p)).X + 1, p(UBound(p)).Y)
'如果数组p中只有一个点坐标,则擦掉上次所画的点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn2, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则擦掉上次所画的直线
End If
Dim pn As Pen = New Pen(lbColor.BackColor)
ReDim Preserve p(UBound(p) + 1)
'重定义动态数组p,用以依次记录各点坐标
p(UBound(p)) = p2
'保存当前坐标
If UBound(p) = 0 Then
g.DrawLine(pn, p2.X, p2.Y, p2.X + 1, p2.Y)
'如果数组p中只有一个点坐标,则在该坐标处画点
ElseIf UBound(p) = 1 Then
g.DrawLine(pn, p(UBound(p) - 1).X, p(UBound(p) - 1).Y, p(UBound(p)).X, p(UBound(p)).Y)
'如果数组p中有两个点坐标,则将这两个坐标连成直线
Else
Dim iStyle As Integer
If cbStyle.Text = "" Then
iStyle = 0
Else
iStyle = cbStyle.Items.IndexOf(cbStyle.Text)
End If
Dim br As HatchBrush = New HatchBrush(iStyle, lbLineColor.BackColor, lbFillColor.BackColor)
g.FillPolygon(br, p)
'如果数组p中已经有两个以上的点坐标,则以数组p中的点为基准画指定填充风格的多边形
End If
End Select
End Sub
Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
If e.Button = MouseButtons.Left Then
Select Case iButton
Case 0
Dim Pn1 As Pen = New Pen(lbColor.BackColor, iWidth)
p2.X = e.X
p2.Y = e.Y
'将终点的坐标赋给p2
g.DrawLine(Pn1, p1, p2)
'从p1到p2画线
p1 = p2
'把p2作为新的起点
Case 1
Dim pn2 As Pen = New Pen(Color.White, iWidth)
p2.X = e.X
p2.Y = e.Y
'将终点的坐标赋给p2
g.DrawLine(pn2, p1, p2)
'从p1到p2画线
p1 = p2
'把p2作为新的起点
Case 3
g.DrawIcon(icoPen, e.X, e.Y)
'画图标
End Select
End If
End Sub
Private Sub PictureBox1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PictureBox1.Click
Select Case iButton
Case 0
Dim pn As Pen = New Pen(lbColor.BackColor)
g.DrawLine(pn, p1.X, p1.Y, p1.X + 1, p1.Y)
'在原地画一个点
Case 1
Dim pn As Pen = New Pen(Color.White)
g.DrawLine(pn, p1.X, p1.Y, p1.X + 1, p1.Y)
'擦除该点颜色
Case 3
Dim pn As Pen = New Pen(lbColor.BackColor)
g.DrawIcon(icoPen, p1.X, p1.Y)
'在原地画一个图标
End Select
End Sub
Private Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -