Ich habe eine BaseControl
Klasse, die so ziemlich alles, was ich brauche für die Steuerung..Net UserControl Implementierung Show und ShowDialog Methoden
Es ist bequem für mich, eine void Show
und DialogResult ShowDialog
Methode von meiner Kontrolle zu implementieren. diese
UPDATE ist der Einfachheit halber als ich meine BaseControls
der ganzen Ort und in einigen Fällen verwenden, möchte ich die possibilit zeigen (Show-Dialog), um sie mit einer möglichst einfachen Code ...
Hier der Code des ShowDialog
Methode ist, die Show
Methode sehr ähnlich zu sein:
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);
}
ich habe versucht, den Ansatz in this post vorgeschlagen, damit die Close in der ShowDialog
Methode. Sowohl in der Originalversion als auch in der überarbeiteten Version, die den obigen Post verwendet, schließt sich das Fenster nicht.
Ich las über das Senden einer "Schließen" Nachricht an die ContainingForm
, aber mit einer Invoke
hat auch nicht funktioniert.
Auch sollte ich einige andere Probleme erwarten, wenn Sie Show
anstelle von ShowDialog
verwenden, da das Formular den UI-Thread nicht blockiert?
Wer kennt die Antwort?
Was das Problem mit einem 'Form' ist, die Sie gemacht, so etwas zu versuchen? –
Die Form-Klasse hat keinen parametrisierten Konstruktor, also ist klar, was hier vor sich geht: 'ContainingForm = new Form (übergeordnet);' – LarsTech
Vererbung für Kompatibilität mit Nicht-Winforms-Projekten ... – neggenbe