2010-03-15 3 views
0

Je reçois l'exception suivante:WPF Erreur lors de la mise en œuvre Login.xaml

"objet Nullable doit avoir une valeur"

Tout fonctionnait quand j'utilisais

StartupURI="MainWindow.xaml "

mais je voulais mettre en place un écran de connexion, donc je l'ai changé en

Startup="Application_Startup" 

puis créé la méthode suivante dans App.xaml.cs:

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     UpdateAccounts(); 
     bool result = true; 
     ///* 
     LoginWindow login = new LoginWindow();    
     result = login.ShowDialog().Value; 
     /* */ 

     if (!result) 
     { 
      return; 
     } 

     MainWindow window = new MainWindow(); 
     bool main = window.ShowDialog().Value; 
    } 

Est-ce que quelqu'un a une idée ce qui se passe? Ou des suggestions sur ce qui est la meilleure pratique pour la mise en œuvre de l'interface de connexion.

L'exception est levée à

bool principal = window.ShowDialog() Valeur.

Exception Stack Trace:

at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) 
    at System.Nullable`1.get_Value() 

Mon MainWindow.xaml était ma fenêtre par défaut qui était quand l'application a commencé chargé, et il a travaillé prefectly bien. Il y a beaucoup de code à l'intérieur. Quelques listes de sélection, quelques listes déroulantes, calendrier mensuel. Il se connecte également à une base de données d'accès.

Pour moi, il semble que ma fenêtre est de retour de ShowDialog() tout de suite, sans me laisser définir DialogResult.

Mise à jour: Je ne suis pas une exception si je change mon code.

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     UpdateAccounts(); 
     bool result = true; 
     ///* 
     LoginWindow login = new LoginWindow();    
     result = login.ShowDialog().Value; 
     /* */ 

     if (!result) 
     { 
      return; 
     } 

     MainWindow window = new MainWindow(); 
     window.ShowDialog(); 
    } 

mais je ne suis pas aussi ma fenêtre principale affiche, et l'application se ferme juste après la connexion

+1

J'écrasai cela et tout fonctionne très bien, mais bien sûr, nous n'avons pas le code à "UpdateAcccounts()" ou la LoginWindow, ou tout ce que vous avez fait à MainWindow. Pouvez-vous donner plus d'informations sur ce qui se passe dans ceux-ci? En outre, si vous pouvez nous donner plus d'informations sur l'endroit où l'exception est lancée, cela aiderait aussi ... –

+0

Mis à jour, je n'obtiens pas d'exception si j'utilise simplement window.ShowDialog(), au lieu d'assigner le résultat à une variable. Mais cela ferme juste mon application sans afficher ma forme et attendre. Y a-t-il quelque chose que j'ai besoin de remplacer dans ma MainWindow pour que cela fonctionne correctement? Il hérite de Windows donc il devrait fonctionner correctement ne devrait-il pas? –

Répondre

0

Trouvé une correction temporaire, ce qui n'est pas la meilleure option mais cela fonctionne.

App.xaml:

<Application x:Class="Power_Scheduler.App" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Startup="Application_Startup" 
    ShutdownMode="OnExplicitShutdown"> 
</Application> 

a dû ajouter ShutdownMode = "OnExplicitShutdown"

dans mon code, j'utilisé la méthode plutôt que ShowDialog() Show().

private void Application_Startup(object sender, StartupEventArgs e) 
    { 
     UpdateAccounts(); 
     bool result = true; 
     ///* 
     LoginWindow login = new LoginWindow();    
     result = login.ShowDialog().Value; 
     /* */ 

     if (!result) 
     { 
      return; 
     } 

     MainWindow window = new MainWindow(); 
     window.Show(); 
    } 

Ce qui maintient l'exécution de l'application et affiche la fenêtre principale.Et dans le MainWindow, je me suis abonné à l'événement fermé et a ajouté le code suivant:

private void Window_Closed(object sender, EventArgs e) 
    { 
     Application.Current.Shutdown(0); 
    }  

Merci pour votre aide tout le monde,

1

À partir du message que vous recevez, il semble que votre login.ShowDialog() renvoie null.

+0

merci pour le pourboire, mais ma fenêtre n'est même pas affichée. Mon MainWindow.xaml était ma fenêtre par défaut précédemment, y a-t-il quelque chose que je dois mettre pour montrer correctement? Et être montré jusqu'à ce qu'il se ferme? –

+0

Je n'ai pas essayé mais je pense que Application_Startup n'est pas le bon événement pour le faire puisque vous bloquez l'exécution avec LoginWindow et rien ne sera affiché. Essayez de déplacer ce code à un autre endroit (après l'événement de démarrage) – ema