Visual Basic 2005 - 為何不使用 Contro.DrawToBitmap 方法

摘要:Visual Basic 2005 - 為何不使用 Contro.DrawToBitmap 方法

我們之前有一篇 Visual C# 2005 的文章提到如何將表單上的 DataGridView 控制項擷取成單一個點陣圖檔。有大陸的朋友表示,一定要使用 Windows API 嗎?為什麼不直接使用 Contro.DrawToBitmap 方法呢?沒錯,使用 Contro.DrawToBitmap 方法確實比較方便,而不需要費事地叫用 Windows API但是大家別忘了,Contro.DrawToBitmap 方法存在下列限制: 

  • 大型點陣圖可能會擲回例外狀況 ArgumentException。所允許的最大大小會視機器而異。
  • DrawToBitmap 方法不支援 Windows XP Tablet PC Edition 2005作業系統的 Ink 控制項。
  • 如果將 TextBox 控制項的 Visible 屬性設為 false,則 DrawToBitmap 方法不會繪製子 TextBox 控制項。
  • 以相反順序呈現容器內的控制項。
  • DrawToBitmap 方法不會對 RichTextBox 控制項發揮完整作用,而只會描繪點陣圖的框線。 

既然有人提到可以用 Contro.DrawToBitmap 方法,我就示範如何實作。下面這一段 VB 2005 的程式碼,示範如何使用 Contro.DrawToBitmap 方法將表單上的 DataGridView 控制項單獨擷取成一個點陣圖:(VC# 2005 的程式碼有空再寫) 

Private Sub Button2_Click(ByVal sender As System.Object, _
  ByVal e As System.EventArgs) Handles Button2.Click
  Try
      SaveFileDialog1.Title = "
儲存成點陣圖"
      SaveFileDialog1.Filter = "點陣圖檔(*.bmp)|*.bmp"
      If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.Cancel Then
          Exit Sub
      End If
  Catch ex As Exception
      Exit Sub
  End Try

  Dim sFilePath As String
  sFilePath = SaveFileDialog1.FileName
  If sFilePath = "" Then
      Exit Sub
  Else
      Try
          Dim g As Graphics = Me.DataGridView1.CreateGraphics
          Dim ibitMap As New Bitmap( _
            Me.DataGridView1.ClientSize.Width, _
            Me.DataGridView1.ClientSize.Height, g)
          Dim DataGridViewRectangle As New _
            Rectangle(Me.DataGridView1.ClientRectangle.X, _
                      Me.DataGridView1.ClientRectangle.Y, _
                      Me.DataGridView1.ClientSize.Width, _
                      Me.DataGridView1.ClientSize.Height)
          Me.DataGridView1.DrawToBitmap(ibitMap, DataGridViewRectangle)
          ibitMap.Save(sFilePath, ImageFormat.Bmp)
      Catch ex As Exception
          MessageBox.Show(ex.Message)
      End Try
  End If
End
Sub