У меня есть приложение, которое устанавливает код содержимого основной формы как виды (который является потомком UserControl
).Winforms ShowDialog не отображается
Теперь, в одном из моих элементов управления, я хочу показать диалоговое окно сообщения либо при его создании, либо при его показе (т. Е. В конструкторе или методе загрузки).
Жутко, то MessageBox.Show()
не показано, как я ожидал ...
Я использую следующий код:
public myControl() {
InitializeComponent();
Load += control_load;
MessageBox.Show("constructor");
}
void control_load(object sender, EventArgs e) {
if (MainForm.Instance.InvokeRequired) {
MainForm.Instance.Invoke((Action)delegate {
MessageBox.Show("Load invoke");
});
return;
}
else {
MessageBox.Show("Load normal");
}
}
}
Симптом: InvokeRequired
является false
. Сообщение «конструктор» не отображается, и у меня есть сообщение «Загрузить нормальное».
Кроме того, если я закомментировать «конструктор» окно сообщения, сообщение не отображается на всех ...
Может кто-нибудь помочь, для моего общего понимания?
Спасибо, Харальд. Вы правильно относитесь к методу «Конструктор», но это не объясняет, почему сообщение «Загрузить нормальное», которое вызывается в функции «Загрузить» (то есть стандартный способ), показывает только если вызов «MessageBox.Show()» в конструктор сделан ... – neggenbe
где вы видите что-либо о форме, показывающей себя? Просто удалите «MessageBox.Show» из конструктора и часть Invoke кода в методе загрузки - во-первых, ваш вышеприведенный комментарий не имеет значения насколько я могу говорить, во-вторых, 'MessageBox.Show' в методе' control_load' больше не отображается ... – neggenbe