Auf MainForm warten



  • Hallo Leute ich habe folgendes Problem,
    mein Programm öffnet Messfiles um damit weiter zu arbeiten.
    Nun habe ich es auch durch den Installationsmodus das die Dateitypen (also alle Dateien mit der Endung .spx)per Doppelklick direkt das Programm starten und in das Diagramm eingefügt.
    Nun ist es so, dass bei geladenen Graphen noch extra zwei Fenster geöffnet werden sollten.
    Mein Problem ist nun, dass beim Doppelklick auf die Datei nicht das Hauptfenster geöffnet wird, sondern nur die zwei extra Fenster.
    Wie kann ich nun dem Programm erst sagen, dass es auf die Mainform warten soll?
    Vielen Dank.
    Sparki



  • Zeige etwas Code. So könnte das Problem einfacher gelöst werden.
    Grüsse Simon



  • Natürlich:
    In der Programm.cs steht folgendes drinnen:

    static void Main(string[] args)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                if (args.Length == 0)
                    Application.Run(new Analyser(""));
                else
                {
                    string file = args[0];
                    if (args[1] == "OpenDocument")
                    {
                        Application.Run(new Analyser(file));
                    }
                }   
            }
    

    Hier wird der Application der Filename mit string übergeben. Wird die Application direkt über die .exe gestartet, so wir ein leerer String übergeben.
    Hier nun der Einsprung in die Application:

    public Analyser(string datei)
            {
                InitializeComponent();
                start();
                if (datei != "")
                {
                    open1(datei);
                }
            }
    

    Hier wird die Componente Initialisiert und der PRogrammcode start (Ein paar vordefinierte Zeichen für das Diagramm) ausgeführt. Wird nun kein leerer String übergeben, so startet nun noch die Funktion open1, an der der Dateiname übergeben wird.
    In der Funktion open1 wird nun die Datei geöffnet und WErte ausgelesen. Am Ende dieser Funktion steht dann folgender Codeblock:

    if (graphen[dateiname].a != 0 | graphen[dateiname].theta != 0 | graphen[dateiname].hkl != null)
                        {
    Beugungslinien BL = new Beugungslinien(Convert.ToString(Spektrenname.SelectedItem), graphen[Convert.ToString(Spektrenname.SelectedItem)].a, graphen[Convert.ToString(Spektrenname.SelectedItem)].theta, graphen[Convert.ToString(Spektrenname.SelectedItem)].hkl);
                                BL.hklanzeige += new Methode(hklanz);
                                BL.Owner = this;
                                BL.Show();
                                BL.hklberechnen();
    
                            }
    

    Hier wird nun abgefragt ob diese Datei schon einmal bearbeitet wurde, wenn ja (a,theta und hkl müssen vorhanden sein), dann öffnen Die Form Beugungslinien.

    Dieser Code funktioniert einwandfrei, wenn das Programm über die .exe gestartet wird, bzw. wenn die Datei die geöffnet wird noch nicht bearbeitet wurde.

    Hoffe ihr könnt mir helfen



  • Quick and Dirty:

    Leg ein statisches Event in Programm an, das Du über die Hauptform feuerst und Du den im Event eingetragenen Formen eine Meldung zur Anzeige gibst.



  • Sparki schrieb:

    Nun ist es so, dass bei geladenen Graphen noch extra zwei Fenster geöffnet werden sollten.

    Sparki, Klarheit im Ausdruck ist wohl nicht Deine Stärke heute...

    Was verstehst Du unter "bei geladenen Graphen"?
    Was verstehst Du unter "extra"?
    Was verstehst Du unter "zwei Fenster"?

    Mein Problem ist nun, dass beim Doppelklick auf die Datei nicht das Hauptfenster geöffnet wird, sondern nur die zwei extra Fenster.

    Doppelklick auf welche Datei?
    Doppelklick von wo aus?
    Was verstehst Du unter "geöffnet werden", wer öffnet denn welche Fenster?
    Läuft denn deine Anwendung bereits, wenn Du auf die Datei doppelklickst?

    Wie kann ich nun dem Programm erst sagen, dass es auf die Mainform warten soll?

    Hmmm, welchem Programm?
    Warum willst du mit dem "Programm" sprechen?
    Ist denn die Mainform nich die Mainform des "Programms"?

    Dein Code trägt wenig zur Klärung der Angelegenheit bei, da es Unwichtiges vom Wichtigen nicht trennt. Knuddlbaer scheint was verstanden zu haben, ich nicht. Sorry, try again.



  • OK, dann verusche ich es nocheinmal anderes zu erklären:
    Unter geladenen Graphen verstehe ich meine Messfiles. Diese Files sind wie XML-Dokumente aufgebaut und man findet in dieser Datei x- und y- Werte. Diese Werte lasse ich nun in meinem Programm in einem Diagramm (zedGraph) darstellen.
    Nun kann ich ein oder auch zwei extra Fenster (Form) öffnen in dem ich ein paar Daten reinschreiben wodurch eine extra Berechnung mit den x-/y-Werten durchgeführt wird.
    Starte ich das Programm so kann ich unter dem Menüpunkt öffnen ein Messfile öffnen und damit arbeiten.
    Da ich nun durch den BEfehl Dateitypen auch eine direkte Verknüpfung zu den Messfiles erstellen kann, habe ich dies gemacht.
    Somit sollte nach Doppelklick auf dieses Messfile das Programm geöffnet und gleichzeitig das File geladen werden (Vergleiche Word: Beim doppelklick auf ein .doc-Datei öffnet sich Word mit dem Text).
    Das Problem ist nun, dass die Mainform in dem das Messfile graphisch dargestellt wird nicht geladen wird bei einem doppelklick auf ein Messfile.
    Durch eine Fehlerabfrage im späteren Code habe ich aber festgestellt, dass das Messfile geladen wird, aber weder die Mainform noch das Eingabefenster werden geöffnet.
    Hoffe ich habe mich nun ein wenig verständlicher ausgedrückt!?



  • Sparki, bitte antworte mir auf folgende Fragen, damit ich deinen Code besser verstehen kann:

    1. Wie heißen deine Forms (Klassennamen der Main-Form bzw. der Nicht-Main-Forms)?
    2. Welcher Programmteil öffnet die Nicht-Main-Forms?
    3. Hast Du denn deine Anwendung als Singleton implementiert? Aus dem Code geht das nicht hervor.
    4. Wie hast Du die Verknüpfung zum Dateityp hergestellt?


Anmelden zum Antworten