C# 连续打印的问题

gtclulong 2015-11-24 03:31:48
尝试一个多页打印的程序,第一次打印是正常的,第二次再点按钮打印时,就会把前两页的内容打到同一页上。请各位帮忙看看问题出在哪里了?

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace 打印多页
{
public partial class Form1 : Form
{
private int Pages;
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)//同样的问题,连续打印时,第二次打印会把1,2页打印到同一页面
{
Pages = 0;
printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage);
printDocument1.Print();
}

void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)
{
//throw new NotImplementedException();
e.HasMorePages = true;
Pages++;
if (Pages == 1)
{
Image MyPic = Image.FromFile("相片.JPG");
e.Graphics.DrawImage(MyPic, 20, 40);
}
if (Pages == 2)
{
e.Graphics.FillPie(new SolidBrush(Color.AliceBlue), new Rectangle(40, 60, 300, 100), 30, 60);
}
if (Pages == 3)
{
e.HasMorePages = false;
e.Graphics.FillRectangle(new SolidBrush(Color.BurlyWood),new Rectangle(46,20,600,400));
}
if (Pages > 3)
e.HasMorePages = false;
}
}
}
...全文
492 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
gtclulong 2015-11-24
  • 打赏
  • 举报
回复
CSDN上果然明白人很多...... 自己折腾了两天多也没找出原因,论坛上2个小时就有了正确答案,还是要经常来论坛啊
gtclulong 2015-11-24
  • 打赏
  • 举报
回复
引用 7 楼 qq_31868467 的回复:
printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage); 这个有点问题吧 每点击一次都会在事件上注册了这个方法 这样感觉不行 printDocument1_PrintPage 在这个方法完成后 你要注销下这个方法 printDocument1.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage) 不知道行不行 你试试
试过了,确实有效!谢谢 原来用惯了VB,刚学C#,很多东西没有接触过,小白阶段,大家多担待。。。。
gtclulong 2015-11-24
  • 打赏
  • 举报
回复
引用 6 楼 51Crack 的回复:
[quote=引用 4 楼 gtclulong 的回复:] 调用代码也是从网上找的,第一次点打印按钮运行都是正常的,第二次再点打印结果就不是我想要的了 printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage); 调用有问题吗?这里的循环是C#自己的执行顺序吧,我只调用了一次。。。
第2次点击时事件绑定了2次,printDocument1_PrintPage也会执行2次,明白?[/quote] 也就是说,print()之后,原来绑定的事件不会消失,还会再执行一次是吗?试了一下,即使用printDocument1=null也没有办法重新打印一份完全相同的东西 hasMorePages=false之后是执行了第二次添加的事件吗? 有什么办法把第一次添加的事件清除掉吗?
转角处灬守候 2015-11-24
  • 打赏
  • 举报
回复
printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage); 这个有点问题吧 每点击一次都会在事件上注册了这个方法 这样感觉不行 printDocument1_PrintPage 在这个方法完成后 你要注销下这个方法 printDocument1.PrintPage -= new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage) 不知道行不行 你试试
51Crack 2015-11-24
  • 打赏
  • 举报
回复
引用 4 楼 gtclulong 的回复:
调用代码也是从网上找的,第一次点打印按钮运行都是正常的,第二次再点打印结果就不是我想要的了 printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage); 调用有问题吗?这里的循环是C#自己的执行顺序吧,我只调用了一次。。。
第2次点击时事件绑定了2次,printDocument1_PrintPage也会执行2次,明白?
  • 打赏
  • 举报
回复
每次调用完了之后结束一下。
gtclulong 2015-11-24
  • 打赏
  • 举报
回复
调用代码也是从网上找的,第一次点打印按钮运行都是正常的,第二次再点打印结果就不是我想要的了 printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage); 调用有问题吗?这里的循环是C#自己的执行顺序吧,我只调用了一次。。。
gtclulong 2015-11-24
  • 打赏
  • 举报
回复
引用 2 楼 51Crack 的回复:
每次都printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage); 肯定不行,1次就够了
我的意思是按钮连续点两次,两次输出的结果不一样 即使用printDocument1=null也不行。是不是print()之后在打印缓存或者什么地方有数据没有清空?
51Crack 2015-11-24
  • 打赏
  • 举报
回复
每次都printDocument1.PrintPage += new System.Drawing.Printing.PrintPageEventHandler(printDocument1_PrintPage); 肯定不行,1次就够了
gtclulong 2015-11-24
  • 打赏
  • 举报
回复
确实尝试过很多次。并且在Pages == 3并且将e.HasMorePages = false之后,程序还会调用一次printDocument1_PrintPage 也就是说,去掉下面代码
if (Pages > 3)
                e.HasMorePages = false;
之后,Pages跳过=3的退出机会,会无限添加新页。

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧