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
相关产品推荐
相关产品推荐

