摘要:VB 2005 - 讀者詢問 DrawString 問題
讀者問題:
章老師:
您好!
看了您的「Visual Basic 2005程式開發與介面設計秘訣」收穫很大,感謝先!但是有關 DrawString 繪製字串的方法好像沒有提到,在此特向章老師請教。在這個方法中的第三個參數是筆刷的顏色,我想在開發的時候根據使用者自己選擇的顏色來繪製(顏色是存在資料庫中的字串,例如: 「red」)如何根據使用者自己選擇的顏色來繪製,煩請章老師告知!謝謝!
回答:
首先,要感謝您對章立民研究室的支持。
其實最簡單的方式,是使用一個 ColorDialog 對話方塊來讓使用者選擇顏色,如此一來,可以避免將字串轉換成色彩的難題。我們寫了一個程式,請參考有無幫助。
如上圖所示,我們在介面上提供一個選擇顏色的按鈕,按下此按鈕,便會建立一個 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