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