2017-12-21 2 views
0

Ich versuche, so etwas wie Login-Fenster in meiner Anwendung zu machen. Natürlich verstehe ich, dass Fenster Login nicht das Hauptfenster gestartet werden soll - das ist, warum ich die App.xaml und App.xaml.cs wie folgt geändert:C# WPF Startup-Fehler

<Application x:Class="WpfApp2.App" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WpfApp2" 
     > 
<Application.Resources> 

</Application.Resources> 

und ich overrided das Ereignis in App.xaml.cs:

protected override void OnStartup(StartupEventArgs e) 
    { 
     try 
     { 
      LoginForm loginForm = new LoginForm(); 
      MainWindow mainWindow = new MainWindow(); 
      bool result = (bool)loginForm .ShowDialog(); 
      if(result) 
      { 
       mainWindow.Show(); 
      } 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

Dieser Code funktioniert, aber es ist nicht gut für mich, weil ich noch einige Parameter in den MainWindow Konstruktor schieben möchte. Also, wenn ich Code dies ändern:

protected override void OnStartup(StartupEventArgs e) 
    { 
     try 
     { 
      LoginForm loginForm = new LoginForm(); 
      bool result = (bool)loginForm .ShowDialog(); 
      if(result) 
      { 
       MessageBox.Show("I am here"); 
       MainWindow mainWindow = new MainWindow(); 
       mainWindow.Show(); 
      } 
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
    } 

Wenn ich diesen Code ausführen - Ich werde mein Login-Formular sehen, nachdem OK-Taste drücken werde ich sehen, „Ich bin hier“, und danach fällt Ausnahme. Hilf mir bitte. Wie löst man dieses Problem? Wenn es nicht genug Code ist - werde ich hinzufügen, es

Mein Login-Fenster sieht aus wie (XAML und Xaml.cs):

<Window x:Class="WpfApp2.LoginForm" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:local="clr-namespace:WpfApp2" 
    mc:Ignorable="d" 
    Title="Hello" Width="480" Height="370"> 
    <Grid> 
    <Button Content="Click Me" Width="100" Height="100" Click="SetDialogResultOK"> 
    </Grid> 
<Window.Resources> 
</Window.Resources> 
</Window> 


public partial class LoginForm : Window 
{ 
    public LoginForm() 
    { 
     InitializeComponent(); 
    } 

    private void SetDialogResultOK(object sender, RoutedEventArgs e) 
    { 
     DialogResult = true; 
    } 
} 

Mein Hauptfenster enthält keine interessant. dies ist ein einfaches Fenster für jetzt

+5

Was ist die Ausnahme? – Nkosi

+0

@Nikos, Nachricht ist Das Anwendungsobjekt wird heruntergefahren – Polly

+1

Die Frage in ihrem aktuellen Zustand ist unklar, da sie unvollständig ist und zu viele Fragen erfordern würde, um zu klären, was gefragt wird. Lesen Sie [ask] und stellen Sie dann ein [mcve] zur Verfügung, mit dem Sie Ihr Problem reproduzieren können, damit wir besser verstehen können, worum es geht. – Nkosi

Antwort

2

Sie die ShutdownMode Eigenschaft auf ShutdownMode.OnExplicitShutdown einstellen könnte und dann die Anwendung herunterzufahren, wenn die MainWindow geschlossen ist:

protected override void OnStartup(StartupEventArgs e) 
{ 
    Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown; 
    try 
    { 
     LoginForm loginForm = new LoginForm(); 
     bool result = (bool)loginForm.ShowDialog(); 
     if (result) 
     { 
      MessageBox.Show("I am here"); 
      MainWindow mainWindow = new MainWindow(); 
      mainWindow.Closed += (ss, ee) => App.Current.Shutdown(); 
      mainWindow.Show(); 
     } 
     else 
     { 
      App.Current.Shutdown(); 
     } 
    } 
    catch (Exception ex) 
    { 
     throw ex; 
    } 
} 
+0

Danke, das hat mein Problem besser gelöst! – Polly