2010-05-18 5 views
4

Je suis nouveau dans le cadre compact .NET (et à peu près à nouveau C# aussi) et j'ai un problème avec des formes de commutation dans mon application mobile. À un niveau élevé, mon application utilise plusieurs formulaires, avec une classe principale "gestionnaire d'application" qui effectue la navigation/commutation entre les formulaires. Mon plan était de créer des formulaires à la demande, de les mettre en cache et d'utiliser une stratégie simple de cacher/montrer.formes de commutation dans compact framework .NET (Windows mobile 6)

Au début, je voulais faire quelque chose comme ce qui suit dans ma classe d'application principale:

public void switchForm(Form newForm) 
{ 
    currentForm.Hide(); // instance member 
    newForm.Show(); 
    currentForm = newForm; 
} 

Cependant, cela ne fonctionne pas comme prévu. La nouvelle forme que je tentais de montrer, est apparu très temporairement, puis disparut derrière la principale forme de ma demande - des idées pour expliquer pourquoi cela se produit? J'ai beaucoup lu sur le changement de forme, et la plupart des endroits semblaient mentionner que la méthode ci-dessus était la façon de le faire.

J'ai ensuite essayé les opérations suivantes:

public void switchForm(Form newForm) 
{ 
    currentForm.Hide(); // instance member 
    currentForm = newForm; 
    newForm.ShowDialog(); 
} 

et cela semble faire l'affaire. Je me demande, cependant, est-ce la bonne façon de s'y prendre? L'utilisation de la méthode ShowDialog() pose cependant un autre problème. Disons que je veux disposer de l'ancienne forme, comme ceci:

public void switchForm(Form newForm) 
{ 
    Form oldForm = currentForm; 
    currentForm = newForm; 
    newForm.ShowDialog(); 
    oldForm.Dispose(); 
} 

J'ai alors découvert que le oldForm.Dispose() le code ne s'exécute pas jusqu'à ce que le newForm.ShowDialog() se termine (le formulaire est fermé). Par conséquent, ce qui précède peut conduire à des fuites avec les formes ne sont pas correctement disposées comme la méthode est appelée encore et encore tout en se déplaçant à de nouvelles formes. Une autre façon est de disposer l'ancienne forme avant de montrer la nouvelle, cependant, alors ma demande rend temporairement quelque chose d'autre (ce qui était derrière les formes) entre l'ancienne forme étant disposé et le nouveau étant rendu:/Comment doit-on s'y prendre faire quelque chose comme ça?

Merci beaucoup.

Répondre

2

Essayez this:

public void switchForm(Form newForm) 
{ 
    Form oldForm = currentForm 
    newForm.Show(); 
    currentForm.Hide(); 
    currentForm = newForm; 
    oldForm.Dispose(); 
} 
1

forment Chaque vous créez dans le projet est une classe.
Par exemple:
créer un formulaire appelé frmExample, si vous voulez l'appeler d'une autre forme que vous devez faire ce qui suit:
-Créer une nouvelle instance de la classe (formulaire) dont vous avez besoin
-Call la nouvelle instance (modal modal ou non)

Class frmOther<br> 
    Dim frmNewForm as New frmExample()<br> 
    frmNewForm.Show()<br> 
End Class 
+0

Bienvenue sur Stack Overflow! J'ai apporté quelques modifications à votre message pour améliorer la clarté. Merci pour votre premier message. –

Questions connexes