[C#][WPF] Gestire più form

venerdì 24 giugno 2011 - 17.33
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows 7  |  Visual Studio 2010

utente Profilo | Junior Member

Nella mia applicazione ci sono 2 Form:
1) Form Principale
2) Form Login

Setto nell'App.xaml questo parametro
StartupUri="MainWindow.xaml"

il codice Xaml di MainWindows è
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

mentre il suo Xaml.cs è
public partial class MainWindow : Window { static private Hashtable Form = new Hashtable(); static public void chiudiFinestra(string nomeFinestra){ foreach (DictionaryEntry temp in Form) { if (temp.Key.ToString().CompareTo(nomeFinestra) == 0) { Form.Remove(nomeFinestra); Window finestra = (Window)temp.Value; finestra.Close(); } } } public MainWindow() { InitializeComponent(); this.controllaLogin(); } public void controllaLogin() { if (!Classi.Sessione.isLoggato()) { /* Se non sono loggato, chiudo tutte le finestre */ foreach(Window temp in Form){ temp.Close(); } Form.Clear(); Login login = new Login(); Form.Add("Login", login); login.ShowDialog(); } } }

Se avvio così il Codice si avvia il programma, crea la form di Login, faccio il login e quando chiudo la finestra di Login da questo errore.
Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Mentre se nel codice Xaml.cs della finestra principale commento la riga
this.controllaLogin();

Si avvia l'applicazione mostrandomi la finestra principale.

Dove sbaglio?

Ps.
Chiudo la finestra di Login dal LoginViewModel in questa maniera
MainWindow.chiudiFinestra("Login");

whiteflash Profilo | Junior Member

ha ragione...in controllaLogin l'hashtable è un dizionario non puoi convertire un valore del dizionario direttamente in window...

casomai devi fare:


foreach(DictionaryEntry temp in Form){
Dim W as window = temp.Value;
W.Close();
}


--------------------------------------
My world is VB.NET 2010 and WPF

utente Profilo | Junior Member

Il problema era in questo pezzo di codice
static public void chiudiFinestra(string nomeFinestra){ foreach (DictionaryEntry temp in Form) { if (temp.Key.ToString().CompareTo(nomeFinestra) == 0) { Form.Remove(nomeFinestra); Window finestra = (Window)temp.Value; finestra.Close(); } } }

In pratica si incasina il "Foreach" se al suo interno fai un
Form.Remove(nomeFinestra);

Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5