Почему при последующих открытиях отчета не появляется диалоговое окно?
Добавлено: 03 июн 2008, 04:40
В файле отчета имеется форма с чекбоксами, в зависимости от состояния которых определяется внешний вид отчета.
При первом открытии отчета форма (как и положено) открывается перед появлением результата, дабы предоставить возможность установки нужных галочек. Закрываю отчет. Снова на своей форме жму кнопку создания отчета - отчет открывается в ту же долю секунды, но форма с чекбоксами перед этим уже не появляется. Т.е. установить настройки не представляется возможным - приходится закрывать приложение и запускать снова.
Пробую решить эту проблему. Для начала закинул вызов метода Show() в отдельный поток:
в результате все виснет и получаю ошибку:
Попытка выполнения управляемого кода под блокировкой OS Loader. Запуск управляемого кода в пределах функции DllMain или функции инициализации образа может вызвать зависание приложения.
Я что-то не так сделал? Ведь я реализовал тот вариант, что вы предложили для метода Design() - там он работает замечательно, но для Show() - получаю ошибку... Почему?
Вернул все обратно как было...
Подумал, может нужно уничтожить объект? Сделал так:
Однако диалоговое окно по прежнему открывается только один раз. Если закрываю отчет и снова вызываю его - окно уже не открывается. Как решить данный вопрос?
При первом открытии отчета форма (как и положено) открывается перед появлением результата, дабы предоставить возможность установки нужных галочек. Закрываю отчет. Снова на своей форме жму кнопку создания отчета - отчет открывается в ту же долю секунды, но форма с чекбоксами перед этим уже не появляется. Т.е. установить настройки не представляется возможным - приходится закрывать приложение и запускать снова.
Пробую решить эту проблему. Для начала закинул вызов метода Show() в отдельный поток:
Код: Выделить всё
[STAThread]
private void openShow()
{
report.Show();
}
///
/// Открыть отчет в предварительном просмотре
///
public void Show()
{
report.RegData(dsName, ds);
Thread t1 = new Thread(new ThreadStart(openShow));
t1.SetApartmentState(ApartmentState.STA);
t1.Start();
}
Попытка выполнения управляемого кода под блокировкой OS Loader. Запуск управляемого кода в пределах функции DllMain или функции инициализации образа может вызвать зависание приложения.
Я что-то не так сделал? Ведь я реализовал тот вариант, что вы предложили для метода Design() - там он работает замечательно, но для Show() - получаю ошибку... Почему?
Вернул все обратно как было...
Подумал, может нужно уничтожить объект? Сделал так:
Код: Выделить всё
///
/// Открыть отчет в предварительном просмотре
///
public void Show()
{
report.RegData(dsName, ds);
report.Show();
report.Dispose(); //добавил эту строку
}