StiViewerControl на вкладках

Обсуждение Stimulsoft Reports.NET
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

StiViewerControl на вкладках

Сообщение Леонид »

Подскажите, пожалуйста ещё одну вещь. Никак не могу понять, почему, когда я в коде пишу:

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

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

    private void GlobalEvents_ClosingDesigner(object sender, CancelEventArgs e)
    {
      e.Cancel = true;
    }
То событие срабатывает, но у меня закрывается почему-то вся форма, хотя метод .Close() я не вызываю при этом.

И ещё не понятен момент (взял я его из вашего примера DesignerManagement):

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

        Stimulsoft.Report.Design.Toolbars.StiStandardToolbarService standardToolbar = Stimulsoft.Report.Design.Toolbars.StiStandardToolbarService.GetService(stiDesigner);
        standardToolbar.ShowClose = false; // <- почему кнопка не скрывается, ни в классическом, ни в ribbon GUI?
Aleksey
Сообщения: 2907
Зарегистрирован: 22 апр 2010, 06:57

StiViewerControl на вкладках

Сообщение Aleksey »

Здравствуйте,

Пожалуйста, пришлите простой пример, который воспроизводит проблему для анализа.

Спасибо.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

StiViewerControl на вкладках

Сообщение Леонид »

Набросал примитивный пример (во вложении).

Суть такая: есть форма (SDI, не MDI), на ней куча вкладок (для примера только две) - на первой кнопка, нажав на которую будет создан designer control на второй вкладке, при нажатии кнопки Close, да, событие работает, теперь я понял почему - потому что эта кнопка вызывает FormClosing event, а зачем, когда у меня вкладки?
Вложения
StiDesignerTabs.7z
(26.57 КБ) 136 скачиваний
Anton Lozovskiy
Сообщения: 264
Зарегистрирован: 12 ноя 2007, 08:16

StiViewerControl на вкладках

Сообщение Anton Lozovskiy »

Здравствуйте,

При нажатии в дизайнере на кнопку Exit, мы ищем родительскую форму, и вызываем у нее метод Close() (это логично, т.к. дизайнер - это контрол и если вы не спрятали данную кнопку из кода, и нажали на нее, нужно закрыть текущее окно). Далее при закрытии дизайнера срабатывает событие StiOptions.Engine.GlobalEvents.ClosingDesigner, которое дает возможность обработать и отменить закрытие формы (у вас выполняется код: e.Cancel = true;). Далее конечно у вас срабатывает событие Form1_FormClosing по цепочке, но значение e.Cancel у него уже равно true. Соответственно форма не закроется. Следовательно вы можете написать следующий код:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
if (e.Cancel)
MessageBox.Show("Why this event is being called now?");
}

Спасибо.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

StiViewerControl на вкладках

Сообщение Леонид »

Да, с закрытием-то формы мне понятно, но почему не работает код, скрывающий эту кнопку Close?

Разве этого кода недостаточно:

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

Stimulsoft.Report.Design.Toolbars.StiStandardToolbarService standardToolbar = Stimulsoft.Report.Design.Toolbars.StiStandardToolbarService.GetService(stiDesigner);
        standardToolbar.ShowClose = false; // hide close button
Aleksey
Сообщения: 2907
Зарегистрирован: 22 апр 2010, 06:57

StiViewerControl на вкладках

Сообщение Aleksey »

Здравствуйте,

Пожалуйста, попробуйте использовать данный код до объявления StiDesignerControl-а

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

Stimulsoft.Report.Design.Toolbars.StiStandardToolbarService standardToolbar = Stimulsoft.Report.Design.Toolbars.StiStandardToolbarService.GetService();
standardToolbar.ShowClose = false; // hide close button

StiOptions.Designer.MainMenu.ShowFileExit = false;

StiDesignerControl stiDesigner = new StiDesignerControl(stiReport);
stiDesigner.Dock = DockStyle.Fill;
Спасибо.
Леонид
Сообщения: 329
Зарегистрирован: 23 июл 2009, 09:53
Откуда: Moscow

StiViewerControl на вкладках

Сообщение Леонид »

Ура! Всё заработало :biggrin:

Да, я понял, что код:

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

Stimulsoft.Report.Design.Toolbars.StiStandardToolbarService standardToolbar = Stimulsoft.Report.Design.Toolbars.StiStandardToolbarService.GetService();
standardToolbar.ShowClose = false; // hide close button

StiOptions.Designer.MainMenu.ShowFileExit = false;
нужно было выполнить перед созданием дизайнера.

Спасибо!
Andrew
Сообщения: 586
Зарегистрирован: 09 июн 2006, 12:22

StiViewerControl на вкладках

Сообщение Andrew »

Здравствуйте,

Отлично.

Удачного Вам дня.
Ответить