Страница 1 из 1

Позвольте перекрыть диалог "отчёт изменён, сохранить? да-нет-отмена"

Добавлено: 03 фев 2009, 09:50
ppvlad
Здравствуйте.

Захотелось мне использовать свой диалог в ситуации, когда пытаемся закрыть изменённый отчёт.

Порылся в исходниках сборки 2008.2.300 и сделал как мне надо, но ведь не сложно предоставить такую возможность изначально?
Некий метод, возвращающий DialogResult, который мог-бы перекрыть разработчик (или событие на эту тему).

Заранее спасибо.

Позвольте перекрыть диалог "отчёт изменён, сохранить? да-нет-отмена"

Добавлено: 03 фев 2009, 13:05
Edward
Вы можете использовать свой диалог сохранения в событии ClosingDesigner.

StiOptions.Engine.GlobalEvents.ClosingDesigner

К примеру, так:

Код: Выделить всё

StiOptions.Engine.GlobalEvents.ClosingDesigner += new CancelEventHandler(GlobalEvents_ClosingDesigner);


        void GlobalEvents_ClosingDesigner(object sender, CancelEventArgs e)
        {
            if (MessageBox.Show("Close?", "ClosingEvent", MessageBoxButtons.OKCancel, MessageBoxIcon.Asterisk, MessageBoxDefaultButton.Button1) != DialogResult.OK)
                e.Cancel = true;
            else
            {
                // чтобы не появилось сообщение:
                (sender as Stimulsoft.Report.Design.StiDesignerControl).Report.IsModified = false;
            }

        }
Спасибо.

Позвольте перекрыть диалог "отчёт изменён, сохранить? да-нет-отмена"

Добавлено: 05 фев 2009, 08:57
ppvlad
спасибо, я с этим вариантом экспериментировал, но как-то не догадался, что можно IsModified самому сбросить...

примерно такой код работает как мне надо:

Код: Выделить всё

        
        void GlobalEvents_ClosingDesigner(object sender, CancelEventArgs e)
        {
            Stimulsoft.Report.StiReport report = (sender as Stimulsoft.Report.Design.StiDesignerControl).Report;
            if ((report != null) && report.IsModified)
            {
                DialogResult res = MessageBox.Show("Save changes?", "ClosingEvent", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Asterisk);
                if (res == DialogResult.Cancel) 
                    e.Cancel = true;
                else
                {
                    if (res == DialogResult.Yes)
                    {
                        MessageBox.Show("DoSave");
                    }

                    // чтобы не появилось сообщение:
                    report.IsModified = false;
                }
            }
        }
НО! Это работает на закрытии дизайнера, тут хоть как-то опередить штатный диалог можно,
а как его подавить на этапе, когда при несохранённом текущем отчёте
пользователь пытается открыть (Open) или создать новый (New)?

там вроде как без вариантов работает StiDesignerControl.TestReportSave(),
а хотелось-бы иметь возможность и здесь подсунуть свой диалог...

Позвольте перекрыть диалог "отчёт изменён, сохранить? да-нет-отмена"

Добавлено: 06 фев 2009, 09:26
Edward
Здравствуйте,

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

Спасибо.

Позвольте перекрыть диалог "отчёт изменён, сохранить? да-нет-отмена"

Добавлено: 05 мар 2009, 17:23
Jan
Здравствуйте,

Добавлено глобальное событие - StiOptions.Engine.GlobalEvents.SaveChangesInDialogBoxDesigner.

Проверьте билд от 9 марта.

Спасибо.