PageSetupDialog中用的单位是百分之一英寸,而对话框上用的是毫米做单位;
PageSetupDialog默认页边距大小为100(百分之一英寸),而是对话框中默认大小为10毫米=3.9(百分之一英寸),所以你一调用对话框页边距就被改为3.9;要解决这个问题,只要在每次调用对话框之前把上、下、左、右页边距统统乘上2.533就可以了!this.storedPageSettings.Margins.Left*=2.533;
this.storedPageSettings.Margins.Right*=2.533;this.storedPageSettings.Margins.Top*=2.533;
this.storedPageSettings.Margins.Bottom*=2.533;pageSetupDialog.PageSettings = this.storedPageSettings;
pageSetupDialog.ShowDialog();一切OK!!

解决方案 »

  1.   

    那就是说 BUG 喽。这样用,行吗?如果用户的平台是 1.1 版本,微软纠正了这个 BUG,这么乱乘一气,是不是太过草率了?请问用过 VS.NET 2003 的朋友,2003 中是这样的吗?
      

  2.   

    10 毫米 = 39 百分之一英寸,不是 3.9,算算。我绝不会采用 qpl007() 的方法来解决这个问题,这种方法用在内部版本的程序中可以凑合。可是用在商业软件中啊,用户是不可预计的。也不知微软在这个控件上是怎么搞的?莫名其妙啊。你要是 39 还可理解,可偏偏是 3.9,不知从何而来。看来我只能自己做 PageSetupDialog 了。我这 100 分注定没人来取了?我只是想听听高手们的三言二语而已,也没人来,真灰心。我加分!!!!!!!!!!!!!!
      

  3.   

    用PrinterUnitConvert转换一下就好了。
    private void button1_Click(object sender, System.EventArgs e)
    {
    try
    {
    if (this.storedPageSettings == null)
    this.storedPageSettings = new PageSettings();
    pageSetupDialog = new PageSetupDialog();
    pageSetupDialog.PageSettings = this.storedPageSettings;
    if (pageSetupDialog.ShowDialog() == DialogResult.OK)
    {
    pageSetupDialog.PageSettings.Margins = 
    PrinterUnitConvert.Convert(pageSetupDialog.PageSettings.Margins,PrinterUnit.ThousandthsOfAnInch, PrinterUnit.HundredthsOfAMillimeter); }
    }
    catch(Exception ex)
    {
    MessageBox.Show(ex.Message);
    }
    //  以下语句用于测试
    #if DEBUG
    MessageBox.Show(this.storedPageSettings.Margins.Left.ToString() + "\n" +
    this.storedPageSettings.Margins.Right.ToString() + "\n" +
    this.storedPageSettings.Margins.Top.ToString() + "\n" +
    this.storedPageSettings.Margins.Bottom.ToString());
    #endif }