Visual Studio express 2013, VB를 사용하고 있습니다. 최대한 간단하게 문제를 간단히 처리 할 수 있도록 2 탭 페이지가있는 탭 컨트롤이있는 양식이 있습니다. 하나의 버튼 클릭으로 두 탭 페이지를 모두 인쇄하려고합니다. 현재 개별 탭에서 CreateGraphics를 사용하려하지만 두 페이지 모두에 첫 번째 탭 인쇄 만합니다. 여기 내 코드입니다, 누구든지 내가 뭘 잘못하고 있는지 또는 내가 완전히 잘못된 라인에 있다면 참조하십시오 수 있습니다. CreateGraphics가 올바른 탭 페이지 그래픽을 검색하지 않는 것처럼 보입니다.VB.NET의 TabControl에 두 TabPages 인쇄
Private Declare Auto Function BitBlt Lib "gdi32.dll" (ByVal hdcDest As IntPtr, ByVal nXDest As Integer, ByVal nYDest As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hdcSrc As IntPtr, ByVal nXSrc As Integer, ByVal nYSrc As Integer, ByVal dwRop As System.Int32) As Boolean
Private Const SRCCOPY As Integer = &HCC0020
Private PagePrinting As Integer
Private Sub ToolStripButton2_Click(sender As Object, e As EventArgs) Handles ToolStripButton2.Click
If PrintDialog1.ShowDialog() = DialogResult.OK Then
PagePrinting = 0
PrintDocument1.Print()
End If
End Sub
Private Sub PrintDocument1_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
If PagePrinting = 0 Then
e.Graphics.DrawImage(GetImage1(), e.MarginBounds)
Else
e.Graphics.DrawImage(GetImage2(), e.MarginBounds)
End If
PagePrinting = PagePrinting + 1
If PagePrinting = 2 Then e.HasMorePages = False Else e.HasMorePages = True
End Sub
Private Function GetImage1() As Bitmap
Dim me_gr As Graphics = Me.BillTabControl.TabPages("PAGE1").CreateGraphics
Dim bm As New Bitmap(Me.BillTabControl.TabPages("PAGE1").ClientSize.Width, Me.BillTabControl.TabPages("PAGE1").ClientSize.Height, me_gr)
Dim bm_gr As Graphics = Graphics.FromImage(bm)
Dim bm_hdc As IntPtr = bm_gr.GetHdc
Dim me_hdc As IntPtr = me_gr.GetHdc
BitBlt(bm_hdc, 0, 0, Me.BillTabControl.TabPages("PAGE1").ClientSize.Width, Me.BillTabControl.TabPages("PAGE1").ClientSize.Height, me_hdc, 0, 0, SRCCOPY)
me_gr.ReleaseHdc(me_hdc)
bm_gr.ReleaseHdc(bm_hdc)
GetImage1 = bm
End Function
Private Function GetImage2() As Bitmap
Dim me_gr As Graphics = Me.BillTabControl.TabPages("PAGE2").CreateGraphics
Dim bm As New Bitmap(Me.BillTabControl.TabPages("PAGE2").ClientSize.Width, Me.BillTabControl.TabPages("PAGE2").ClientSize.Height, me_gr)
Dim bm_gr As Graphics = Graphics.FromImage(bm)
Dim bm_hdc As IntPtr = bm_gr.GetHdc
Dim me_hdc As IntPtr = me_gr.GetHdc
BitBlt(bm_hdc, 0, 0, Me.BillTabControl.TabPages("PAGE2").ClientSize.Width, Me.BillTabControl.TabPages("PAGE2").ClientSize.Height, me_hdc, 0, 0, SRCCOPY)
me_gr.ReleaseHdc(me_hdc)
bm_gr.ReleaseHdc(bm_hdc)
GetImage2 = bm
End Function
선택하지 않은 탭에서는 CreateGraphics()를 호출 할 수 없습니다. 먼저 선택하고 TabPage.Update() 메서드를 호출하여 페인팅을 완료해야합니다. 대신 TabPage.DrawToBitmap() 메서드를 사용해보십시오. –
나는 그것이 작동하지 않는 것을 시도했다. 문제는 이미 인쇄를 시작한 것일 수 있으므로 탭을 선택하는 것만으로는 효과가없는 것 같습니다. 페이지를 2 개의 분리 된 PrintDocument1.Print() 행으로 분할하면 제대로 작동합니다 (원하는 것은 아님). 나는 그걸로 놀아나고, 대답을 찾으면 여기에 게시 할 것이다. 먼저 DrawToBitmap을 시도하겠습니다. 둘 다 고마워. –
예, DrawToBitmap이 작동합니다. 두 개의 GetImage 잠수함에있는 코드가 이제 정렬되었습니다. 대단히 감사합니다. 코드는 CreateGraphics보다 간단합니다. 두 개의 GetImage 서브를 변경했습니다. 이 작업을 수행하기 위해 탭 페이지를 선택하지 않아도됩니다. 코드는보기 흉하게 보입니다. 허용 될 때 8 시간 후에 게시 할 예정입니다. 아직 충분히 평판이 나지 않습니다. –