Eine einfache und saubere Lösung, die ich in meinen Projekten implementiert habe, ist die Verwendung einer Callback-Funktion (Action<T>
in C#), die ausgelöst wird, wenn der Benutzer die gewünschte Eingabe eingibt.
Beispiel Showdialog mit:
private void cmdGetList_Click(object sender, EventArgs e)
{
string strInput = "";
frmInputBox frmDialog = new frmInputBox("User input:");
if (frmDialog.ShowDialog() == DialogResult.OK)
strInput = frmDialog.prpResult;
else
strInput = null;
}
Boxeingang es außerhalb des MDI Hauptformular ist.
Jetzt; die Lösung mit Show:
private void cmdGetList_Click(object sender, EventArgs e)
{
getInput(this, (string strResult) =>
{
MessageBox.Show(strResult);
});
}
private void getInput(Form frmParent, Action<string> callback)
{
// CUSTOM INPUT BOX
frmInputBox frmDialog = new frmInputBox("User input:");
// EVENT TO DISPOSE THE FORM
frmDialog.FormClosed += (object closeSender, FormClosedEventArgs closeE) =>
{
frmDialog.Dispose();
frmDialog = null;
};
frmDialog.MdiParent = frmParent; // Previosuly I set => frmParent.IsMdiContainer = true;
// frmDialog.ShowDialog(); <== WILL RAISE AN ERROR
// INSTEAD OF:
frmDialog.MdiParent = frmParent;
frmDialog.FormClosing += (object sender, FormClosingEventArgs e) =>
{
if (frmDialog.DialogResult == DialogResult.OK)
callback(frmDialog.prpResult);
else
callback(null);
};
frmDialog.Show();
}
Das Eingabefeld (Oder irgendeine Form wird innerhalb des übergeordneten MDI-Formulars anzuzeigen):
Der Trick ist, zu verwenden, um eine Callback-Funktion (Aktion auf C#) zu verwalten, wenn Der Benutzer hat eine Eingabe gemacht.
Es sind mehr Codezeilen, aber es ist wertlos, ein sauberes Projekt anzuzeigen.
Setzen Sie einfach nicht die MdiParent Eigenschaft des Formulars und ShowDialog() wird gut funktionieren. –