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

VB.NET ListView绑定数据库数据打印预览文字重叠问题求助

问题原因
  • 同一行所有ListView子项的绘制X坐标都固定为150,不同列内容完全重叠
  • 打印按钮逻辑顺序错误:先弹出预览对话框再设置页面参数,预览无法生效修改后的配置
  • 冗余绘制:Itm.Text与Itm.SubItems(0)内容完全一致,重复绘制了第一列内容
修复后的代码

1. 打印按钮点击事件

Private Sub btnprint_Click(sender As Object, e As EventArgs) Handles btnprint.Click
    ' 先设置打印参数,再加载预览
    With PrintDocument1
        .PrinterSettings.DefaultPageSettings.Landscape = False
    End With
    PrintPreviewDialog1.Document = PrintDocument1
    PrintPreviewDialog1.ShowDialog()
End Sub

注:移除了预览后直接调用Print()的逻辑,避免用户点预览取消后仍自动触发打印,如需直接打印可在预览对话框的打印按钮操作,或自行调整逻辑

2. PrintPage打印事件

Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
    Dim H As Integer = 50
    ' 定义每列的X坐标,可根据实际列宽自行调整数值
    Dim colXPos As Integer() = {50, 150, 250, 350, 450, 550, 650, 750, 850, 950}
    ' 打印标题
    e.Graphics.DrawString("PRINT", New Drawing.Font("Times New Roman", 10), Brushes.Black, 50, H)
    H += 30 ' 标题和内容之间留空
    
    For Each Itm As ListViewItem In ListView1.Items
        ' 绘制第一列(ProductID)
        e.Graphics.DrawString(Itm.Text, New Drawing.Font("Times New Roman", 10), Brushes.Black, colXPos(0), H)
        ' 循环绘制剩余9列
        For i As Integer = 1 To 9
            e.Graphics.DrawString(Itm.SubItems(i).Text, New Drawing.Font("Times New Roman", 10), Brushes.Black, colXPos(i), H)
        Next
        H += 20 ' 每行间距
    Next
End Sub

如果列内容过长超出页面范围,可以调整colXPos的数值,或者开启页面横向打印,将Landscape属性设为True即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:24:10