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

C#中如何在PrintPreviewDialog中隐藏指定文本项及空字段标题

搞定空字段标题隐藏的打印预览问题

嘿,我明白你现在的困扰——程序没报错,但打印预览里空字段的标题还顽固地显示着,得把它们藏起来对吧?这就给你整明白怎么改代码:

核心思路

问题出在你现在的代码是不管字段内容有没有,直接硬绘标题+内容。我们要做的就是:先判断字段值是否有效(非空、非空白),只有有效时才绘制对应的标题和内容,同时动态调整打印的Y坐标,避免空字段留下难看的空白。

修改后的代码示例

把你原来的DVPrintDocument_PrintPage方法改成这样:

private void DVPrintDocument_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
    // 初始化打印字体和起始Y坐标(和你原来的起始位置对齐)
    Font printFont = new Font("Arial", 12, FontStyle.Regular);
    int yPos = 400;
    int lineSpacing = 25; // 行间距,可根据字体大小调整

    // 处理NAME字段
    var nameValue = dgvItem.CurrentRow.Cells[4].Value;
    if (nameValue != null && !string.IsNullOrWhiteSpace(nameValue.ToString()))
    {
        e.Graphics.DrawString($"NAME : {nameValue}", printFont, Brushes.Black, new Point(25, yPos));
        yPos += lineSpacing;
    }

    // 处理WEIGHT字段(照着上面的逻辑套就行)
    var weightValue = dgvItem.CurrentRow.Cells[/*替换成WEIGHT对应的列索引*/].Value;
    if (weightValue != null && !string.IsNullOrWhiteSpace(weightValue.ToString()))
    {
        e.Graphics.DrawString($"WEIGHT : {weightValue}", printFont, Brushes.Black, new Point(25, yPos));
        yPos += lineSpacing;
    }

    // 其他需要处理的字段,都按照这个逻辑逐个复制修改即可...
}

关键细节说明

  • 安全判断:先用nameValue != null避免空引用报错,再用string.IsNullOrWhiteSpace过滤掉空字符串、全空格的无效内容,确保只有真正有值的字段才显示标题。
  • 动态布局:每次绘制有效字段后,把yPos加上行间距,这样后面的内容会自动往上靠拢,不会因为空字段留下多余的空白。
  • 易扩展性:所有需要隐藏标题的字段都可以套这个逻辑,只需要改列索引和标题文字就行,非常省心。

这样改完之后,打印预览里空字段的标题就会自动隐藏啦,整体布局也会更紧凑美观~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:42:17