读者问题: <?xml:namespace prefix = o />
<?xml:namespace prefix = st1 />
章
老师:
您好!
看了您的「
Visual Basic 2005
程序开发与界面设计秘诀」
收获很大,感谢先!但是有关
DrawString
绘制字符串的方法好像没有提到,在此特向章老师请教。在这个方法中的第三个参数是笔刷的颜色,我想在开发的时候根据使用者自己选择的颜色来绘制(颜色是存在数据库中的字符串,例如:
“red”
)如何根据用户自己选择的颜色来绘制,烦请章老师告知!谢谢!
回答:
首先,要感谢您对章立民研究室的支持。
其实最简单的方式,是使用一个
ColorDialog
对话框来让用户选择颜色,如此一来,可以避免将字符串转换成色彩的难题。我们写了一个程序,请参考有无帮助。
![](https://i-blog.csdnimg.cn/blog_migrate/d7d0053e2b9f0c78a06a3884815afc36.jpeg)
如上图所示,我们在接口上提供一个选择颜色的按钮,按下此按钮,便会建立一个
ColorDialog
对象以便让使用者在色彩对话框中选择颜色。我们会将用户选择的颜色指派给「选择颜色」按钮的前景色,然后根据「选择颜色」按钮的前景色来建立笔刷,并进行后续的绘制字符串作业。兹将程序代码完整列示如下:
Option
Strict On
Imports System.Drawing.Drawing2D
Public Class Form1
Private Sub btnSelectColor_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSelectColor.Click
Dim MyDialog As New ColorDialog()
MyDialog.AllowFullOpen = False
MyDialog.ShowHelp = True
If (MyDialog.ShowDialog() = Windows.Forms.DialogResult.OK) Then
' 将「选择颜色」按钮的前景色设定成使用者所选取的颜色。
Me.btnSelectColor.ForeColor = MyDialog.Color
End If
End Sub
Private Sub btnBrushText_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnBrushText.Click
Dim textSize As SizeF
Dim g As Graphics
Dim myBrush As Brush
Dim myFont As New Font("Times New Roman", 50, FontStyle.Regular)
' 根据 PictureBox 控件建立一个 Graphics 对象并清除其内容。
g = PictureBox1.CreateGraphics()
g.Clear(Color.White)
' 取得用来绘制文字的所需大小。
textSize = g.MeasureString(TextBox1.Text, myFont)
' 建立一个使用者所选取之颜色的笔刷。我们之前已经将使用者
' 所选取的颜色指派给按钮的前景色。
myBrush = New SolidBrush(Me.btnSelectColor.ForeColor)
' 绘制文字。
g.DrawString(TextBox1.Text, myFont, myBrush, _
(PictureBox1.Width - textSize.Width) / 2, _
(PictureBox1.Height - textSize.Height) / 2)
End Sub
End Class
Imports System.Drawing.Drawing2D
Public Class Form1
Private Sub btnSelectColor_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnSelectColor.Click
Dim MyDialog As New ColorDialog()
MyDialog.AllowFullOpen = False
MyDialog.ShowHelp = True
If (MyDialog.ShowDialog() = Windows.Forms.DialogResult.OK) Then
' 将「选择颜色」按钮的前景色设定成使用者所选取的颜色。
Me.btnSelectColor.ForeColor = MyDialog.Color
End If
End Sub
Private Sub btnBrushText_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles btnBrushText.Click
Dim textSize As SizeF
Dim g As Graphics
Dim myBrush As Brush
Dim myFont As New Font("Times New Roman", 50, FontStyle.Regular)
' 根据 PictureBox 控件建立一个 Graphics 对象并清除其内容。
g = PictureBox1.CreateGraphics()
g.Clear(Color.White)
' 取得用来绘制文字的所需大小。
textSize = g.MeasureString(TextBox1.Text, myFont)
' 建立一个使用者所选取之颜色的笔刷。我们之前已经将使用者
' 所选取的颜色指派给按钮的前景色。
myBrush = New SolidBrush(Me.btnSelectColor.ForeColor)
' 绘制文字。
g.DrawString(TextBox1.Text, myFont, myBrush, _
(PictureBox1.Width - textSize.Width) / 2, _
(PictureBox1.Height - textSize.Height) / 2)
End Sub
End Class
转载于:https://blog.51cto.com/liminzhang/53395