本帖最后由 corpofwine 于 2009-08-10 14:26:08 编辑

解决方案 »

  1.   

    各位大哥,小弟最近被.NET 的打印搞的头晕,通过网上各种查询也没能解决,希望有和我遇到相同问题的朋友能够帮助解决一下,这里先谢了,问题如下:我做一个单据打印的小功能,打印的单据都是固定的纸型,我们在客户机上定义了这种纸为“EPSON”,长宽略。
    用户还要求有一个更换打印机的按钮,可以方便其更换打印机,从不同的打印机输出。
    最后,还要保证每次用户登录上来后不用重复的调整纸型,只要保持住EPSON就可以。界面上有两个按钮,一个是页面设置,打开PageSetupDialog,还有一个更换打印机,打开PrinterSetupDialog,其他略。
    我申请了一个叫PrinterSetting的Setting存为用户设置,我用一个_pageSettings类型为 PageSettings的本地变量保存所有的页面设置:private PageSettings _pageSettings;
    //初始化略
    点击页面设置按钮的代码如下:       private void toolStripButton2_Click(object sender, EventArgs e)
            {
                //前面已经取出用户设置存在_pageSettings里
                pageSetupDialog1.PageSettings = _pageSettings;
                if (pageSetupDialog1.ShowDialog(this) == DialogResult.OK)
                {
                    printPreviewControl1.InvalidatePreview();
                    //为了让_pageSetting不作为一个指向某块地址的变量,它本身和它的关键属性我基本都用new声明的
                    _pageSettings.PaperSize = new PaperSize(pageSetupDialog1.PageSettings.PaperSize.PaperName,
                        pageSetupDialog1.PageSettings.PaperSize.Width, pageSetupDialog1.PageSettings.PaperSize.Height);
                    _pageSettings.PaperSize.PaperName = "EPSON";
                    _pageSettings.Margins = new Margins(pageSetupDialog1.PageSettings.Margins.Left,
                        pageSetupDialog1.PageSettings.Margins.Right, pageSetupDialog1.PageSettings.Margins.Top,
                        pageSetupDialog1.PageSettings.Margins.Bottom);
                    //最后保存设置
                    Properties.Settings.Default.PrinterSettings = _pageSettings;
                    Properties.Settings.Default.Save();
                }
            }
    点击更换打印机按钮的代码如下:        private void toolStripButton2_Click_1(object sender, EventArgs e)
            {
                //从设置里读取打印机名称
                printDialog1.PrinterSettings.PrinterName = Properties.Settings.Default.CasePrinterName;
                if (this.printDialog1.ShowDialog(this) == DialogResult.OK)
                {
                    this.printDocument1.PrinterSettings.PrinterName = this.printDialog1.PrinterSettings.PrinterName;
                    Properties.Settings.Default.CasePrinterName = this.printDialog1.PrinterSettings.
                }
                //如果更换打印机,则显示的是custom,而不是EPSON
                MessageBox.Show(_pageSettings.PaperSize.PaperName);
            }
    问题是我自己声明的_pageSettings变量,在打印机更改时发生了变化,而这期间,我没对其做过任何写的操作,怎么才能让它保持 EPSON不变呢,又不想硬编码
    期待达人给予帮助,多谢
    小弟不才,问题如若没陈述清楚,还麻烦您提醒一下,我好做些补充,再次致谢
      

  2.   

    "问题是我自己声明的_pageSettings变量,在打印机更改时发生了变化..."这个比较奇怪,楼主在private void toolStripButton2_Click_1方法打个断点看看
    我感觉不是在这个地方改变的。
    还有,你的 _pageSettings是在什么地方初始话的。
      

  3.   


    谢谢你的回答至于名称改变的问题,已经找到答案了,我把_pageSettings的引用给了DefaultPageSetting导致更换打印机的时候,系统把我的本地变量给更改了
    现在的问题是点击页面设置按钮的这句pageSetupDialog1.PageSettings = _pageSettings;
    起不到预计的效果,比如我这句执行的时候我的_pageSettings还是EPSON呢,但是页面设置对话框里显示的是Letter而不是EPSON,很郁闷
      

  4.   

    原来DefaultPageSetting不能乱用,学习到了