Ostatnio studiowałem Androida i próbowałem przenieść jedną z jego funkcji do C# Compact Framework.Próba zamknięcia formularza po kolejnym jest wyświetlana w języku C# cf
To, co zrobiłem, to stworzyć klasę abstrakcyjną, którą nazywam Aktywnością. Klasa ta wygląda następująco
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
}
Problem mam tylko z prowadzeniem część komendy
Zasadniczo wszystkie moje zajęcia realizować powyższą klasę Show()
, wczytać plik xml i wyświetlić go. Gdy chcę przejść do nowej klasy/postaci (na przykład idąc od ACMain do ACLogIn) używam tego kodu
Activity.LoadNext(new ACLogIn);
która ma załadować kolejną postać, pokaż go i rozładować obecną formę
i próbował tych roztworów (w sposób Show()
) i tu jest problem z każdym
pomocą
myForm.ShowDialog()
To działa, ale blokuje wykonanie, co oznacza, że stara forma nie zamyka, a tym bardziej mi poruszać się pomiędzy formami Im bardziej zwiększa się proces stoswykorzystujące
myForm.Show()
To działa, zamyka starą formę po sobie stary jest pokazany, ale natychmiast po tym zamyka program i kończy goużyciu
Application.Run(myForm)
to działa tylko na pierwszym formularzu ładowany, kiedy przejść do następnego formularza, to pokazuje ona następnie zgłasza wyjątek gadka " Wartość nie mieści się w oczekiwanym zakresie "
Czy ktoś może mi pomóc rozwiązać ten problem lub znaleźć alternatywę?
Głównym problemem będzie to, że możesz mieć tylko 1 główny formularz. Sprawdź, czy aplikacja ma zapisywalną właściwość MainForm, a następnie użyj jej z Show(). –