Ich habe Android in letzter Zeit untersucht, und ich habe versucht, eine seiner Funktionen in C# kompakte Framework zu portieren.Versuchen, ein Formular nach dem nächsten zu schließen ist in C# cf
Ich habe eine abstrakte Klasse erstellt, die ich Aktivität nenne. Diese Klasse wie dies
internal abstract class Activity
{
protected Form myForm;
private static Activity myCurrentActivity = null;
private static Activity myNextActivity = null;
internal static void LoadNext(Activity nextActivity)
{
myNextActivity = nextActivity;
if (myNextActivity != null)
{
myNextActivity.Show();
if (myCurrentActivity != null)
{
myCurrentActivity.Close();
myCurrentActivity = null;
}
myCurrentActivity = myNextActivity;
myNextActivity = null;
}
}
internal void Show()
{
//PROBLEM IS HERE
Application.Run(myForm);
//myForm.Show();
//myForm.ShowDialog();
//
}
internal void Close()
{
myForm.Close();
}
internal void GenerateForm()
{
///Code that uses the Layout class to create a form, and then stores it in myForm
//then attaches click handlers on all the clickable controls in the form
//it is besides the point in this problem
}
protected abstract void Click(Control control);
//this receives all the click events from all the controls in the form
//it is besides the point in this problem
}
sieht das Problem, das ich ist habe mit dem Teil des Show()
Befehls
Grundsätzlich ist alle meine Klassen die obige Klasse implementieren, eine XML-Datei laden und anzeigen. Wenn ich will (zum Beispiel geht von ACMain zu ACLogIn) zu einer neuen Klasse/Form zu überführen verwende ich diesen Code
Activity.LoadNext(new ACLogIn);
, die angeblich die nächste Form zu laden, zeigen Sie sich, und die aktuelle Form entladen
ich habe diese Lösungen (in der Show()
Methode) versucht, und hier ist das Problem mit jedem
mit
myForm.ShowDialog()
Dies funktioniert, aber blockiert die Ausführung, was bedeutet, dass die alte Form nicht schließt, und je mehr ich bewege sich zwischen den Formen, desto mehr der Prozess-Stack erhöhtmit
myForm.Show()
Dies funktioniert, schließt die alte Form nach dem alte wird gezeigt, aber unmittelbar danach das Programm geschlossen und beendet sieApplication.Run(myForm)
Verwendung Dies funktioniert nur auf dem ersten Formular geladen, wenn ich auf die nächste Form bewegen, zeigt er es dann eine Ausnahme auslöst sagen " Wert fällt nicht in den erwarteten Bereich "
Kann mir jemand helfen, dies zu beheben oder eine Alternative zu finden?
Das Hauptproblem wäre, dass Sie nur 1 Hauptformular haben können. Überprüfen Sie, ob die Anwendung eine beschreibbare MainForm-Eigenschaft hat und verwenden Sie diese mit Show(). –