Autor Beitrag
ebber
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: So 12.04.09 13:20 
Hi,

ich möchte gerne ganz am anfang meines Programmes überprüfen ob es überhaupt starten darf. Da gibt es die App.g.cs:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
public static void Main() {
            Überprüfung();
            Rr.App app = new Rr.App();
            app.InitializeComponent();
            app.Run();
        }


Wenn ich da die Überprüfung() reinmachen, funktioniert das ganze. Leider, wie auch schon in der Datei erwähnt, ist sie "auto-generated". Wenn sie nicht geöffnet ist wird sie bei jedem built überschrieben.
Ich habe dann versucht die Main() hier zu löschen und in App.xaml.cs zu setzen. Das hat auch funktioniert. Wenn die App.g.cs aber wieder erstellt wird bekomme ich verständlicherweise den Fehler dass es Main() schon gibt.

Kann mir da vielleicht jemand helfen?

MfG

Ps: Ich weis nicht ob es wichtig ist, oder ob man es sieht. Es is WPF.


Moderiert von user profile iconKha: Topic aus Sonstiges (.NET) verschoben am So 12.04.2009 um 13:44
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 12.04.09 14:04 
Dafür solltest du das Application.Startup-Event benutzen können (bzw. OnStartup überschreiben).
user profile iconebber hat folgendes geschrieben Zum zitierten Posting springen:
Ps: Ich weis nicht ob es wichtig ist, oder ob man es sieht. Es is WPF.
Die WPF-Sparte wäre jedenfalls nicht verkehrt ;) .

_________________
>λ=
ebber Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: So 12.04.09 14:24 
Ok, das nächste mal kommts dann gleich in WPF :oops:

Das Startup event habe ich auch gesehen, leider kommt das zu spät. Ich glaube, erst nach InitializeComponent(); und das wäre dann unnötig. Also meine mainform wird aufjedenfall erstellt und auch wieder zerstört.
ebber Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Sa 18.04.09 01:31 
Ich habe da irgendwie was falsch interpretiert.

Das OnStartup Event scheint mir doch das richtige zu sein für da was ich machen möchte. Das Problem lag wo anders.

Wie gesagt wollte ich überprüfen ob das Programm überhaupt starten darf:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
protected override void OnStartup(StartupEventArgs e)
{
         if (new AskIfCanStartWindow().ShowDialog().Value == false)
              Close();
}


Ich wollte das einfach in einem Fenster abfragen, mit einem Ja / Nein Button. Wenn man nein drückt, wollte ich das Programm einfach wieder schließen. Wenn nicht sollte es einfach normal weiterlaufen.

Das Problem scheint mir jetzt aber zu sein, dass das Programm in mein Frage-Window das MainWindow interpretiert? Denn egal was ich mache schließt sich die Anwendung, nachdem das Fenster angezeigt wurde wieder.

Kann mir vielleicht bitte bei diesem Problem jemand helfen?

MfG
Greenberet
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 339
Erhaltene Danke: 20

Win 10
C# (VS 2012), C++ (VS 2012/GCC), PAWN(Notepad++), Java(NetBeans)
BeitragVerfasst: Sa 18.04.09 10:00 
Probiers mal mit DialogResult
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 18.04.09 11:21 
user profile iconebber hat folgendes geschrieben Zum zitierten Posting springen:
Das Problem scheint mir jetzt aber zu sein, dass das Programm in mein Frage-Window das MainWindow interpretiert?
Jupp:
Zitat:
MainWindow is automatically set with a reference to the first Window object to be instantiated in the AppDomain.

You can specify a different main window by setting MainWindow assigning another Windows object to the MainWindow property.

If the ShutdownMode property of the Application object is set to OnMainWindowClose, closing the main window causes the application to shut down.
Du könntest also MainWindow explizit zuweisen, z.B. so:
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
      base.OnStartup(e);

      MainWindow = new MyMainWindow();
      if (new MyToolWindow().ShowDialog() == true)
        MainWindow.Show();

_________________
>λ=
ebber Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Sa 18.04.09 12:50 
Irgendwie hat das so wie du vorgeschlagen hast nich funktioniert, oder ich habe was falsch gemacht, aber am Ende hatte ich immer 2 MainWindows.

Eine kurze Zwischenfrage: Wäre es nicht besser das Startup-Event zu verwenden? Ist ja das gleiche, aber ich kann dann base.On... weglassen?

Eine andere Möglichkeit, die ich nach deinem Zitat gefunden habe ist die:

ausblenden C#-Quelltext
1:
2:
3:
4:
      ShutdownMode = ShutdownMode.OnExplicitShutdown;

      if (new MyToolWindow().ShowDialog() == false)
                Application.Current.Shutdown();


Das funktioniert im Prinzip nur wird nachdem ich Application.Current.Shutdown() aufgerufen habe noch mein MainWindow erstellt und wieder zerstört.

So würde das funktionieren:
ausblenden C#-Quelltext
1:
Process.GetCurrentProcess().Kill();					

Scheint mir aber doch unschön?
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 18.04.09 13:07 
user profile iconebber hat folgendes geschrieben Zum zitierten Posting springen:
Irgendwie hat das so wie du vorgeschlagen hast nich funktioniert, oder ich habe was falsch gemacht, aber am Ende hatte ich immer 2 MainWindows.
Hups, du musst im XAML natürlich noch das StartupUri-Attribut löschen.

user profile iconebber hat folgendes geschrieben Zum zitierten Posting springen:
Eine kurze Zwischenfrage: Wäre es nicht besser das Startup-Event zu verwenden? Ist ja das gleiche, aber ich kann dann base.On... weglassen?
Dann hättest du eine C#-Zeile gespart und eine XAML-Zeile mehr... öhm, von mir aus :gruebel: .

_________________
>λ=
ebber Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Sa 18.04.09 13:28 
Ok, danke, es funktioniert.

Nur noch eine kleinigkeit stört mich. Nun wird das MainWindow doch erstellt. Auch wenn ich es vielleicht gar nicht brauche. Ich lasse es jetzt mal so, aber wenn gerade jemand noch eine bessere Lösung hat, dann her damit.

MfG
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Sa 18.04.09 13:40 
Wenn's sein muss... ;)
ausblenden C#-Quelltext
1:
2:
3:
4:
5:
      ShutdownMode = ShutdownMode.OnExplicitShutdown;
      if (new MyToolWindow().ShowDialog() == true) {
        ShutdownMode = ShutdownMode.OnMainWindowClose;
        new MainWindow().Show();
      }

_________________
>λ=
ebber Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 239
Erhaltene Danke: 1

Win XP, Win 7
C# (VS 2010), Delphi (2007), Expression 4
BeitragVerfasst: Sa 18.04.09 16:07 
Oh, daran hatte ich irgendwie nicht gedacht.

Danke, jetzt bin ich glücklich :D