16.06.2011, 20:16 | #1 |
Участник
|
Глюки DialogBox
Обнаружил странный глюк при работе DialogBox.
Если код вызван из кнопке с типом менюитем и выдает пользователю DialogBox, например задавая вопрос box::YesNo(...) То в качестве текста выдается не то, что программист написал, а текст из статус бара, то есть в нашем случае подсказка для кнопки. Причем если box::YesNo(...) дергается несколько раз, то такой глюк наблюдается только при первом вызове. Кто знает как победить ? Похоже где-то в ядре портится память. Ax2009 build RU7 (хотя вроде бы и на более ранних билдах воспроизводилось) |
|
|
За это сообщение автора поблагодарили: gl00mie (5), S.Kuskov (2). |
16.06.2011, 21:00 | #2 |
Ищущий знания...
|
Проверил в Ах 3.0 SP3 вроде нормальный текст показывает.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
|
За это сообщение автора поблагодарили: Logger (1). |
17.06.2011, 01:03 | #3 |
Участник
|
В итоге переписали метод на .Net
Глюк ядра обошли. X++: //pkoz 16.06.2011 // GRD_R2301_reservationMany_pkoz //pkoz 16.06.2011 // обходим глюк ядра когда в диалог попадал текст из статус бара // [url]http://msdn.microsoft.com/ru-ru/library/6wc4zekd.aspx[/url] public client //server static DialogButton yesNo_Net( str _text, DialogButton _defaultButton, str _title = "@SYS11132", str _bottomText = '') { DialogButton ret; System.Windows.Forms.MessageBoxDefaultButton NetDefaultButton; InteropPermission interopPerm; ; if (clientKind() == ClientType::COMObject) return _defaultButton; // GRD_CheckDialogInTTS("Box::yesNo_Net"); // GRD_CheckDialogInTTS_pkoz, Ловим диалоги внутри транзакции, pkoz, 17.12.2008 if( SysTaskRecorderEventManager::parmRecording() ) return SysTaskRecorderGlobal::handleDialogButton(DialogBoxType::YesNoBox, _text, _title, _bottomText, _defaultButton); /* return new DialogBox(DialogBoxType::YesNoBox, _text, _title, _bottomText, _defaultButton).retval(); */ // get dll interop permission interopPerm = new InteropPermission(InteropKind::ClrInterop); interopPerm.assert(); if (_defaultButton == DialogButton::Yes) { NetDefaultButton = System.Windows.Forms.MessageBoxDefaultButton::Button1; } else { NetDefaultButton = System.Windows.Forms.MessageBoxDefaultButton::Button2; } if (System.Windows.Forms.DialogResult::Yes == System.Windows.Forms.MessageBox::Show( _text, _title, // для _bottomText места не нашлось - и фиг с ним System.Windows.Forms.MessageBoxButtons::YesNo, System.Windows.Forms.MessageBoxIcon::Question, NetDefaultButton ) ) { ret = DialogButton::Yes; } else { ret = DialogButton::No; } return ret; } |
|
|
За это сообщение автора поблагодарили: lev (3). |