Sanyon_d Ответов: 2

Диалоговое окно "Настройка страницы"


При нажатии кнопки событие в форме windows я использую следующий код, чтобы показать диалоговое окно настройки страницы.
PageSetupDialog pageSetup = new PageSetupDialog();
pageSetup.PrinterSettings = new System.Drawing.Printing.PrinterSettings();
pageSetup.PageSettings = new System.Drawing.Printing.PageSettings();
pageSetup.EnableMetric = false;
pageSetup.ShowDialog();


После настройки настройки страницы и принтера я нажал кнопку ОК. Но когда диалоговое окно настройки страницы открывается снова, оно сбрасывается к настройкам по умолчанию. Ранее измененные значения не отображаются.

2 Ответов

Рейтинг:
2

Luc Pattyn

Вы не сохраняете никаких настроек. В основном существует два способа получить предыдущие значения в качестве предустановленных значений по умолчанию:

1. продолжайте использовать один и тот же диалог, т. е. new PageSetupDialog(); линия из петли.

2. или действительно сохраните настройки, а затем восстановите их в следующем диалоговом окне, когда вам это понадобится.

Очевидно, что № 1-это более простой способ.

:)


Рейтинг:
2

Sergey Alexandrovich Kryukov

Конечно, это будет сделано, потому что вы создадите совершенно новый экземпляр диалогового окна с помощью

PageSetupDialog pageSetup = new PageSetupDialog();
А чего еще можно было ожидать?

Вам действительно нужно повторно использовать один и тот же объект снова и снова. Самый лучший и универсальный способ сделать это по требованию с помощью ленивая инициализация узор, смотри http://en.wikipedia.org/wiki/Lazy_initialization[^].

Я бы просто сохранил ссылку на диалог как поле основной формы, так что вся картина выглядела бы так:

public class MainForm : Form {

    PageSetupDialog PageSetupDialog {
        get {
            if (fPageSetupDialog == null) {
                fPageSetupDialog = new PageSetupDialog();
                fPageSetupDialog.PrinterSettings = new System.Drawing.Printing.PrinterSettings();
                fPageSetupDialog.PageSettings = new System.Drawing.Printing.PageSettings();
                fPageSetupDialog.EnableMetric = false;
            }
            return fPageSetupDialog;
    } //PageSetupDialog

    PageSetupDialog fPageSetupDialog; //null at first, don't use it directly

    //...

    void SomeMethodWherePageSetupDialogIsUsed() {
        // of the very first call, an instance will be created
        // on other calls, same instance will be used
        // preserving all the previous settings
        PageSetupDialog.ShowDialog();
        //...
    } //SomeMethodWherePageSetupDialogIsUsed

} //class MainForm


—СА