VB 2005 - 讀者詢問 DrawString 問題

摘要: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