在c#中,自己建一个窗体,设置一些打印机的参数,比如说打印份数,写到textbox里面,然后传给printdialog组件中的份数,而且不显示printdialog,点击自己窗体上的“打印”,然后打印出来,当然这里只是一个参数,还有许多参数要设置,所以想请教高人,看怎么解决这个问题

解决方案 »

  1.   

    当然可以自定义一个打印参数设置窗体,向其传PrintSetting即可
      

  2.   

    手头的一个项目中的应用:public partial class FrmPrint : Form
       {
          /// <summary>
          /// 打印信息
          /// </summary>
          private PrinterSettings m_printerSettings;
           /// <summary>
           /// 双面打印
           /// </summary>
           private bool m_duplex;      public FrmPrint(PrinterSettings printerSettings)
          {
             InitializeComponent();
             this.m_printerSettings = printerSettings;
          }      private void FrmPrint_Load(object sender, EventArgs e)
          {
             if (this.m_printerSettings != null && this.m_printerSettings.IsValid)
             {
                 ToolTip toolTip = new ToolTip();
                 toolTip.SetToolTip(chkDuplex, "说明:\r\n请根据具体打印机型号及功能,确定是否选择该项!");            this.lblPrintName.Text = this.m_printerSettings.PrinterName;
                 //设置起始和终止页初始值
                this.numPageFrom.Minimum = this.m_printerSettings.MinimumPage;
                this.numPageFrom.Maximum = this.m_printerSettings.MaximumPage;
                this.numPageFrom.Value = this.m_printerSettings.MinimumPage;            this.numPageTo.Minimum = this.m_printerSettings.MinimumPage;
                this.numPageTo.Maximum = this.m_printerSettings.MaximumPage;
                this.numPageTo.Value = this.m_printerSettings.MaximumPage;
             }
             else
             {
                string msg = String.Format("由于当前打印机安装有问题,无法打印。\r\n\"{0}\"请检查打印机设置或重新选择打印机。", this.m_printerSettings.PrinterName);
                MessageBox.Show(msg, "打印");
                this.DialogResult = DialogResult.Cancel;
                this.Close();
             }
          }      /// <summary>
          /// 打印
          /// </summary>
          /// <param name="sender"></param>
          /// <param name="e"></param>
          private void btnOk_Click(object sender, EventArgs e)
          {
             if (rbtnSomePages.Checked)
             {
                this.m_printerSettings.PrintRange = PrintRange.SomePages;
                int pageFrom, pageTo;
                if (int.TryParse(numPageFrom.Text, out pageFrom) &&
                   int.TryParse(numPageTo.Text, out pageTo))
                {
                   if (pageFrom > pageTo)
                   {
                      int tmp;
                      tmp = pageFrom;
                      pageFrom = pageTo;
                      pageTo = tmp;
                   }
                   this.m_printerSettings.FromPage = pageFrom;
                   this.m_printerSettings.ToPage = pageTo;
                }
                else
                {
                   MessageBox.Show("打印异常,选择的打印起始或结束页码无效!");
                   this.DialogResult = DialogResult.Cancel;
                   this.Close();
                }
             }
             else if (rbtnAll.Checked)
             {
                this.m_printerSettings.PrintRange = PrintRange.AllPages;
             }
             else if (rbtnCurrent.Checked)
             {
                 this.m_printerSettings.PrintRange = PrintRange.Selection;
             }
             this.DialogResult = DialogResult.OK;
          }      /// <summary>
          /// 打印指定页
          /// </summary>
          /// <param name="sender"></param>
          /// <param name="e"></param>
          private void rbtnSomePages_CheckedChanged(object sender, EventArgs e)
          {
             RadioButton rbtn = sender as RadioButton;
             if (rbtn.Checked)
             {
                this.numPageTo.Enabled = true;
                
                this.numPageFrom.Enabled = true;
             }
             else
             {
                this.numPageFrom.Enabled = false;
                this.numPageTo.Enabled = false;
             }
          }       private void chkDuplex_CheckedChanged(object sender, EventArgs e)
           {
               this.m_duplex = chkDuplex.Checked;
           }
           
          public PrinterSettings PrinterSettings
          {
             get { return this.m_printerSettings; }
             set { this.m_printerSettings = value; }
          }       /// <summary>
           /// 获取或设置是否双面打印
           /// </summary>
           public bool Duplex
           {
               get { return this.m_duplex; }
               set { this.m_duplex = value; }
           }
       }
      

  3.   

    定义一个PrinterSettings对象,给它赋值。后打印时用这个PrinterSettings设置
      

  4.   

    不好意思
    .NET   Framework   类库       PrinterSettings   成员请参见 
    PrinterSettings   类   |   System.Drawing.Printing   命名空间   |   C++   托管扩展编程   
    PrinterSettings   概述 公共构造函数 
    PrinterSettings   构造函数   初始化   PrinterSettings   类的新实例。   公共属性 
    CanDuplex   获取指示打印机是否支持双面打印的值。   
    Collate   获取或设置一个值,该值指示打印文档是否逐份打印。   
    Copies   获取或设置要打印的文档份数。   
    DefaultPageSettings   获取此打印机的默认页设置。   
    Duplex   获取或设置双面打印的打印机设置。   
    FromPage   获取或设置要打印的第一页的页码。   
    InstalledPrinters   获取安装在计算机上所有打印机的名称。   
    IsDefaultPrinter   获取一个值,该值指示   PrinterName   属性是否指定默认打印机(用户显式设置   PrinterName   的情况除外)。   
    IsPlotter   获取指示该打印机是否是绘图仪的值。   
    IsValid   获取一个值,该值指示   PrinterName   属性是否指定了有效的打印机。   
    LandscapeAngle   获取旋转纵向方向以生成横向方向的角度,以度为单位。   
    MaximumCopies   获取打印机允许一次打印的最多份数。   
    MaximumPage   获取或设置可以在   PrintDialog   中选定的最大的   FromPage   或   ToPage。   
    MinimumPage   获取或设置可以在   PrintDialog   中选定的最小的   FromPage   或   ToPage。   
    PaperSizes   获取该打印机支持的纸张大小。   
    PaperSources   获取打印机上可用的纸张来源纸盒。   
    PrinterName   获取或设置要使用的打印机的名称。   
    PrinterResolutions   获取该打印机支持的所有分辨率。   
    PrintRange   获取或设置用户已指定要打印的页码。   
    PrintToFile   获取或设置一个值,该值指示打印输出是否发送到文件,而不发送到端口。   
    SupportsColor   获取指示该打印机是否支持彩色打印的值。   
    ToPage   获取或设置要打印的最后一页的页码。   公共方法 
    Clone   创建此   PrinterSettings   对象的一个副本。   
    CreateMeasurementGraphics   返回   Graphics   对象,该对象包含创建   PrintDocument   时有用的打印机信息,例如,打印机的   TextMetric   对象。   
    Equals(从   Object   继承)   已重载。确定两个   Object   实例是否相等。   
    GetHashCode(从   Object   继承)   用作特定类型的哈希函数,适合在哈希算法和数据结构(如哈希表)中使用。   
    GetHdevmode   已重载。创建与打印机设置相对应的   DEVMODE   结构的句柄。   
    GetHdevnames   创建与打印机设置相对应的   DEVNAMES   结构的句柄。   
    GetType(从   Object   继承)   获取当前实例的   Type。   
    SetHdevmode   将相关信息从给定句柄复制到   PrinterSettings   中。   
    SetHdevnames   将相关信息从给定句柄复制到   PrinterSettings   中。   
    ToString   已重写。参见   Object.ToString。   受保护的方法 
    Finalize(从   Object   继承)   已重写。允许   Object   在“垃圾回收”回收   Object   之前尝试释放资源并执行其他清理操作。   
    在   C#   和   C++   中,使用析构函数语法来表示终结程序。 
      
    MemberwiseClone(从   Object   继承)   创建当前   Object   的浅表副本。   请参见 
    PrinterSettings   类   |   System.Drawing.Printing   命名空间   |   C++   托管扩展编程