У меня есть класс BaseControl
, делающий почти все, что мне нужно для элементов управления.
Мне удобно реализовать метод void Show
и DialogResult ShowDialog
из моего управления.
ОБНОВЛЕНИЕ это для удобства, так как я использую свой BaseControls
повсюду, и в некоторых случаях я хочу, чтобы можно было показать (показать-диалог) их с помощью самого простого кода...
Вот код метода ShowDialog
, метод Show
очень похож:
Form ContainingForm = null;
public DialogResult ShowDialog(string title, Control parent) {
ContainingForm = new Form();
this.Dock = DockStyle.Fill;
ContainingForm.Controls.Add(this);
ContainingForm.Text = title;
//
DialogResult res = ContainingForm.ShowDialog();
ContainingForm.Close();
return res;
}
private void Close(DialogResult result) {
if (ContainingForm != null) {
ContainingForm.DialogResult = result;
// original code: form is not closing...
// ContainingForm.Close();
}
}
// button on BaseControl closing the control
protected void Button_Click(object sender, EventArgs e) {
this.Close(DialogResult.OK);
}
Я попробовал подход, предложенный в этом сообщении, поэтому Close в ShowDialog
метод. И в оригинальной версии, и в исправленной с использованием поста выше окно не закрывается.
Я читал об отправке сообщения «Закрыть» на ContainingForm
, но использование Invoke
тоже не сработало.
Кроме того, следует ли ожидать каких-либо других проблем при использовании Show
вместо ShowDialog
, поскольку форма не блокирует поток пользовательского интерфейса?
Кто-нибудь знает ответ на этот вопрос??
Form
, который заставил вас попробовать что-то подобное? - person Reza Aghaei   schedule 21.11.2016ContainingForm = new Form(parent);
- person LarsTech   schedule 21.11.2016ShowDialog
пользовательский элемент управления, вместо него можно использоватьForm
. Также, если вы хотите использовать его какUserControl
, установитеFormBorderStyle
вNone
и установите егоTopLevel
в false и используйте его точно так же, как пользовательский элемент управления. - person Reza Aghaei   schedule 21.11.2016UserControl
, а неForm
. - person Reza Aghaei   schedule 21.11.2016Form
, и я не хочу делать его «формой», а удобной оболочкой для отображенияUserControl
... - person neggenbe   schedule 21.11.2016ContainingForm.Dispose()
действительно решил мои проблемы. - person neggenbe   schedule 21.11.2016