You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Split Container内标签打印无内容问题求助

解决SplitContainer内容打印空白的问题

原代码存在的问题

  • 创建的Bitmap尺寸为1x1,完全无法容纳SplitContainer的内容,DrawToBitmap操作后图像仍是空白状态。
  • 没有将生成的图像绘制到打印页的Graphics上下文,相当于未把内容输出到打印介质。
  • 在PrintPage事件中设置PrinterName时机错误,此时打印流程已启动,该设置不会生效。

修复方案及代码

  1. 提前在打印前指定目标打印机
  2. 创建与SplitContainer尺寸匹配的Bitmap,确保完整容纳容器内容
  3. 调用SplitContainer自身的DrawToBitmap方法绘制内容,保证只打印目标区域
  4. 将生成的Bitmap绘制到打印页的Graphics对象上,支持位置调整或缩放

修正后的代码:

Private Sub cmdPrint_Click(sender As Object, e As EventArgs) Handles cmdPrint.Click
    ' 打印前指定目标打印机
    PrintDocument1.PrinterSettings.PrinterName = cboPrinter.Text
    PrintDocument1.Print()
End Sub

Private Sub PrintDocument1_PrintPage(sender As Object, e As PrintPageEventArgs) Handles PrintDocument1.PrintPage
    ' 创建与SplitContainer尺寸一致的Bitmap,Using语句自动释放资源
    Using bmp As New Bitmap(SplitContainer1.ClientSize.Width, SplitContainer1.ClientSize.Height)
        ' 让SplitContainer绘制自身及子控件到Bitmap
        SplitContainer1.DrawToBitmap(bmp, New Rectangle(0, 0, bmp.Width, bmp.Height))
        
        ' 将Bitmap绘制到打印页,(10,10)为打印起始偏移量
        e.Graphics.DrawImage(bmp, 10, 10)
        
        ' 可选:按纸张比例缩放打印内容
        ' Dim scale As Single = e.MarginBounds.Width / bmp.Width
        ' e.Graphics.DrawImage(bmp, e.MarginBounds.X, e.MarginBounds.Y, bmp.Width * scale, bmp.Height * scale)
    End Using
End Sub

内容的提问来源于stack exchange,提问作者BrianJ_NYC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 09:23:14