⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmprint.cs

📁 用C#编写的一个新的打印程序
💻 CS
字号:
using System;
using System.Drawing;
using System.Drawing.Printing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace GoldPrinter
{
	/// <summary>
	/// Form1 的摘要说明。
	/// </summary>
	public class frmPrint : System.Windows.Forms.Form
	{
		private System.Drawing.Printing.PageSettings mpageSettings;

		private System.Windows.Forms.MainMenu mainMenu1;
		private System.Windows.Forms.MenuItem menuFile;
		private System.Windows.Forms.MenuItem menuFilePageSetup;
		private System.Windows.Forms.MenuItem menuFilePrintPreview;
		private System.Windows.Forms.MenuItem menuFilePrint;

		private System.Windows.Forms.DataGrid dataGrid1;
		private System.Windows.Forms.Button btnPrintEase;
		private System.Windows.Forms.Button btnPrintAll;

		/// <summary>
		/// 必需的设计器变量。
		/// </summary>
		private System.ComponentModel.Container components = null;

		public frmPrint()
		{
			//
			// Windows 窗体设计器支持所必需的
			//
			InitializeComponent();

			//
			// TODO: 在 InitializeComponent 调用后添加任何构造函数代码
			//
		}

		/// <summary>
		/// 清理所有正在使用的资源。
		/// </summary>
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows 窗体设计器生成的代码
		/// <summary>
		/// 设计器支持所需的方法 - 不要使用代码编辑器修改
		/// 此方法的内容。
		/// </summary>
		private void InitializeComponent()
		{
			this.mainMenu1 = new System.Windows.Forms.MainMenu();
			this.menuFile = new System.Windows.Forms.MenuItem();
			this.menuFilePageSetup = new System.Windows.Forms.MenuItem();
			this.menuFilePrintPreview = new System.Windows.Forms.MenuItem();
			this.menuFilePrint = new System.Windows.Forms.MenuItem();
			this.dataGrid1 = new System.Windows.Forms.DataGrid();
			this.btnPrintEase = new System.Windows.Forms.Button();
			this.btnPrintAll = new System.Windows.Forms.Button();
			((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).BeginInit();
			this.SuspendLayout();
			// 
			// mainMenu1
			// 
			this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					  this.menuFile});
			// 
			// menuFile
			// 
			this.menuFile.Index = 0;
			this.menuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
																					 this.menuFilePageSetup,
																					 this.menuFilePrintPreview,
																					 this.menuFilePrint});
			this.menuFile.Text = "&File";
			// 
			// menuFilePageSetup
			// 
			this.menuFilePageSetup.Index = 0;
			this.menuFilePageSetup.Text = "Page Set&up";
			this.menuFilePageSetup.Click += new System.EventHandler(this.menuFilePageSetup_Click);
			// 
			// menuFilePrintPreview
			// 
			this.menuFilePrintPreview.Index = 1;
			this.menuFilePrintPreview.Text = "Print Pre&view";
			this.menuFilePrintPreview.Click += new System.EventHandler(this.menuFilePrintPreview_Click);
			// 
			// menuFilePrint
			// 
			this.menuFilePrint.Index = 2;
			this.menuFilePrint.Text = "&Print";
			this.menuFilePrint.Click += new System.EventHandler(this.menuFilePrint_Click);
			// 
			// dataGrid1
			// 
			this.dataGrid1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
				| System.Windows.Forms.AnchorStyles.Left) 
				| System.Windows.Forms.AnchorStyles.Right)));
			this.dataGrid1.DataMember = "";
			this.dataGrid1.HeaderForeColor = System.Drawing.SystemColors.ControlText;
			this.dataGrid1.Location = new System.Drawing.Point(2, 32);
			this.dataGrid1.Name = "dataGrid1";
			this.dataGrid1.Size = new System.Drawing.Size(518, 336);
			this.dataGrid1.TabIndex = 0;
			// 
			// btnPrintEase
			// 
			this.btnPrintEase.Location = new System.Drawing.Point(3, 7);
			this.btnPrintEase.Name = "btnPrintEase";
			this.btnPrintEase.Size = new System.Drawing.Size(200, 23);
			this.btnPrintEase.TabIndex = 1;
			this.btnPrintEase.Text = "唉,打个网格试试吧?";
			this.btnPrintEase.Click += new System.EventHandler(this.btnPrintEase_Click);
			// 
			// btnPrintAll
			// 
			this.btnPrintAll.Location = new System.Drawing.Point(232, 8);
			this.btnPrintAll.Name = "btnPrintAll";
			this.btnPrintAll.Size = new System.Drawing.Size(200, 23);
			this.btnPrintAll.TabIndex = 2;
			this.btnPrintAll.Text = "哈哈,老士,瞧我的!";
			this.btnPrintAll.Click += new System.EventHandler(this.btnPrintAll_Click);
			// 
			// frmPrint
			// 
			this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
			this.BackColor = System.Drawing.SystemColors.Control;
			this.ClientSize = new System.Drawing.Size(520, 374);
			this.Controls.Add(this.btnPrintAll);
			this.Controls.Add(this.btnPrintEase);
			this.Controls.Add(this.dataGrid1);
			this.Menu = this.mainMenu1;
			this.Name = "frmPrint";
			this.Text = "SimplePrintingExample";
			this.Load += new System.EventHandler(this.frmPrint_Load);
			((System.ComponentModel.ISupportInitialize)(this.dataGrid1)).EndInit();
			this.ResumeLayout(false);

		}
		#endregion

		/// <summary>
		/// 应用程序的主入口点。
		/// </summary>
		[STAThread]
		static void Main() 
		{
			Application.Run(new frmPrint());
		}

		private void frmPrint_Load(object sender, System.EventArgs e)
		{
			this.dataGrid1.DataSource = this.GetDataSource();
		}

		private void btnPrintEase_Click(object sender, System.EventArgs e)
		{
			MisPrinter webmis = new MisPrinter();							//打印组件
			webmis.Title = "WebMIS.Net快速开发工具\nWWW.AlinkSoft.COM";		//网格标题
			webmis.DataSource = this.dataGrid1;								//DataGrid作为数据源
			webmis.Preview();												//打印预览
			webmis = null;		
		}

		private void btnPrintAll_Click(object sender, System.EventArgs e)
		{
			menuFilePrintPreview_Click(null,null);
		}


		private void menuFilePageSetup_Click(object sender, System.EventArgs e)
		{

		}
		private void menuFilePrint_Click(object sender, System.EventArgs e)
		{
			this.Print(true);
		}

		private void menuFilePrintPreview_Click(object sender, System.EventArgs e)
		{
			this.Print(false);
		}


		private void Print(bool print)
		{
			#region 打印比较全的例子
			MisPrinter webmis = new MisPrinter();	//打印组件

			//webmis.BackColor = Color.FloralWhite;	//背景色
			//webmis.IsPrinterMargins = true;		//试试看,去掉注释后就明白了
			//webmis.RowsPerPage = 20;				//可以指定每页打印的行数,默认自适应
			//webmis.GridBorder = GoldPrinter.GridBorderFlag.SingleBold;

			Title title = new Title();
			title.Text = "WebMIS.Net快速开发工具\nWWW.AlinkSoft.COM";
			webmis.Title = title;									//等效于webmis.Title = "WebMIS.Net快速开发工具\nWWW.AlinkSoft.COM";
																
			webmis.Caption = "  ——之打印源码,欢迎下载";		//但对象方式(见webmis.Title)更具特性,因为还可以定义字体等

																//可以是以'|'分隔的字符串或一维数组或具有更多特性的Top/Bottom对象
			webmis.Top = "作者:周方勇|2004-08-19|版本:V1.1";	//等价于 webmis.Top = new string[]{"作者:周方勇","2004-08-19","版本:V1.1"};
																//webmis.Top = new Top();  此种表示见webmis.Bottom
			
			
			Header header = new Header(3,4);					//行列数基本不受限制,但超过一页失去意义,因为以Body为主,以其它为辅
			header.IsDrawAllPage = true;						//可以指定每页是否重复打印
			header.SetText(0,0,"Header00");						//实际上可以设置header.DataSource
			header.SetText(0,1,"Header01");						//DataSource可以是字符串、一维数组、二维数组、DataTable、WinDataGrid、WebDataGrid、
			header.SetText(0,2,"Header02");						//MSHFlexGrid、HtmlTable等等二维形式
			header.SetText(0,3,"Header03");						//

			header.SetText(1,0,"Header10");						//同仁们还可以根据实际应用对GridBase的DataSource进行扩展
			header.SetText(1,1,"Header11");						
			header.SetText(1,2,"Header12");						
			header.SetText(1,3,"Header13");

			header.SetText(2,0,"Header20");
			header.SetText(2,1,"Header21");
			header.SetText(2,2,"Header22");
			header.SetText(2,3,"Header23");
			webmis.Header = header;									

			MultiHeader multiHeader = new MultiHeader(2,6);

			multiHeader.SetMergeTextOnColSel(0,0,1,"    项目\nNo.     .");	
			multiHeader.IsDrawDiagonalLine = true;								
			multiHeader.DiagonalLineRows = 2;	//试试其它的数如3  又如1.5F

																				
			multiHeader.SetMergeTextOnColSel(1,0,1,"产品\n名称");	//等价于	//multiHeader.SetText(1,1,"产品\n名称");
																				//multiHeader.SetText(0,1,"产品\n名称");			
			multiHeader.SetText(0,2,"规格");
																				//multiHeader.SetText(0,3,"订量信息");
			multiHeader.SetMergeTextOnRowSel(0,3,5,"订量信息");		//等价于	//multiHeader.SetText(0,4,"订量信息");
																				//multiHeader.SetText(0,5,"订量信息");	

			multiHeader.SetText(1,2,"规格");
			multiHeader.SetText(1,3,"单价");
			multiHeader.SetText(1,4,"数量");
			multiHeader.SetText(1,5,"金额");
			webmis.MultiHeader = multiHeader;

			Body body = new Body();
			body.ColsAlignString = "LLCRRR";						//由左中右第一个字母组成,对应于每列的对对齐方式
			
			//只要是二维数组,都可以,因此DataGrid、MSHFlexGrid、DBGrid、DataTable、HtmlTable等等都OK
			//这里用DataGrid作一个例子。不过,你自己可以写一个函数,把没有支持的二维控件转换成数组就OK了
			//body.DataSource = this.GetDataSource();					
			//body.DataSource = (DataTable)(this.dataGrid1.DataSource);	//或者
			//body.DataSource = this.dataGrid1.DataSource;				//或者
			body.DataSource = this.dataGrid1;							//或者

			
			int mcols = 6;
			#region 这是数组的例子,把body.DataSource = (DataTable)(this.dataGrid1.DataSource);注释掉,去掉下面的注释看看
			/*
			int mrows = 50;//111;
			string[,] arrstrGrid = new string[mrows,mcols];
			for(int i=0 ;i< mrows ; i++)
			{
				for(int j=0 ;j< mcols-1 ; j++)
				{
					arrstrGrid[i,j] = (i + 1).ToString() + "行" + (j + 1).ToString() + "列";
				}			
				arrstrGrid[i,0] = (i + 1).ToString();
				arrstrGrid[i,mcols-1] = (i + 1).ToString();
			}

			body.DataSource = arrstrGrid;		//body.GridText = arrstrGrid;
			*/
			#endregion

			webmis.Body = body;
			//webmis.DataSource = this.dataGrid1;			//如果直接打印网格,可以不用定义Body,用这一句就够了
			webmis.IsSubTotalPerPage = true;				//这是打印本页小计
			webmis.SubTotalCol = (mcols-2).ToString() + ";" + (mcols-1).ToString();		//用分号分隔的要求小计的列				
			
			Footer footer = new Footer(2,5);
			footer.SetText(0,0,"Footer00");
			footer.SetText(0,1,"Footer01");
			footer.SetText(0,2,"Footer02");
			footer.SetText(0,3,"Footer03");
			footer.SetText(0,4,"Footer04");

			footer.SetText(1,0,"Footer10");
			footer.SetText(1,1,"Footer11");
			footer.SetText(1,2,"Footer12");
			footer.SetText(1,3,"Footer13");
			footer.SetText(1,4,"Footer14");
			footer.IsDrawAllPage = true;
			webmis.Footer = footer;
			
			GoldPrinter.Bottom bottom = new Bottom();		//Top/Bottom的另一种方式
			bottom.Text =  "打印程序开源版||打印日期:" + System.DateTime.Now.ToLongDateString();
			webmis.Bottom = bottom;


			//将注释去掉试试看
			Sewing sewing = new Sewing(20,SewingDirectionFlag.Left);
			webmis.Sewing = sewing;
			webmis.IsSewingLine = true;			//打印装订线		


			webmis.IsSubTotalPerPage = true;	//每页加小计
		

			if (print)
			{
				webmis.Print();
			}
			else
			{
				webmis.Preview();
			}

			webmis.Dispose();
			webmis = null;
			#endregion 
		}


		private DataTable GetDataSource()
		{
			DataTable dt=new DataTable();

			int rows = 50;
			int cols = 6;

			//增加行
			for (int intRowIndex=0;intRowIndex<rows;intRowIndex++)
			{
				dt.Rows.Add(dt.NewRow());				
			}
			//增加新列
			for (int intColIndex=0;intColIndex<cols;intColIndex++)
			{
				//dt.Columns.Add(intColIndex.ToString());
				dt.Columns.Add();
				//填写默认值为空串(.NET  TextColumn默认为"空")
				dt.Columns[intColIndex].DefaultValue="";
			}

			int i,j;
			for(i=0 ;i< rows ; i++)
			{
				for(j=0 ;j< cols-3 ; j++)
				{
					dt.Rows[i][j] = (i + 1).ToString() + "行" + (j + 1).ToString() + "列";					
					dt.Rows[i][cols-3] = (j + 1).ToString() + "." + (i + 1).ToString();
					dt.Rows[i][cols-2] = (i + 1).ToString();
				}							
				dt.Rows[i][cols-1] = (double.Parse(dt.Rows[i][cols-2].ToString()) * double.Parse(dt.Rows[i][cols-3].ToString())).ToString();
			}	
	
			return dt;
		}

   
	}//End Class
}//End Namespace

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -