Aktives Fenster herausfinden



  • Hallo, ich habe folgendes Problem. Ich habe eine Form (nennen wir es die Hauptform), mit der ich unendlich viele andere Fenster (Unterfenster) erstellen kann. Jetzt möchte ich aus einem der Fenster etwas auslesen. Leider weiß ich nicht wie ich das lösen soll, da es keine MDI werden soll. Wenn ich eins der Unterfenster markieren, dann ist dieses ja aktiv. Doch dann möchte ich im Hauptfenster im Menu zbsp. Speichern drücken und somit soll dann der Inhalt aus dem noch vorhin aktiven Fenster ausgelesen werden.

    Ich habe es schon so versucht:
    [DllImport("user32.dll")]
    private static extern GetForegroundWindow();

    auch mit AcitveWindow().

    Doch leider wird mir immer ja das Hauptfenster angezeigt, was ja nach dem Menüklick auch selbstverständlich das aktive ist.

    Wie komme ich aber an das letzte aktive Unterfenster? Kann mir jemand helfen?



  • Mit einem Menüclick im Hauptfenster wird dieses aktiv. Du musst dir also im Hauptfenster merken, welches der Unterfenster gerade aktiv ist. Wenn das Hauptfenster die Unterfenster kennt, wäre das mit Events relativ einfach zu lösen:
    Einfach auf

    Focus() / Close()
    

    der Unterfenster achten. Wenn die Unterfenster das Hauptfenster kennen, kannst du es über Methodenaufrufe steuern.



  • Ich erstelle die Unterfenster aus dem Hauptfenster mit:

    Form f = new Form();
    f.show();
    

    Es können somit ganz viele sein. Wie soll ich dann aus dem Hauptfenster wissen welches Unterfenster gemeint ist. Die heißen ja theoretisch alle f. Nur die Unterfenster haben eine eindeutiges Hauptfenster.



  • Du kannst auf Events aus dem Unterfenster reagieren. Also im Hauptfenster

    Form f = new Form();
    f.GotFocus += new EventHandler(childWindowGotFocus);
    f.show();
    
    ...
    
    private void childWindowGotFocus(object sender, EventArgs args)
    {
      this.activeForm = (Form)sender; //Vorher activeForm als memeber definieren
    }
    

    Das gleiche kannst du mit LostFocus, Closed usw. machen.
    Falls "sender" nicht das Unterfenster ist (bin mir da nicht ganz sicher), kannst du ein eigenes Event erstellen, bei dem du als sender das Unterfenster übergibst, und in "OnFocus" des Unterfensters auslösen.

    Jetzt bekommst du immer mit, welches das aktive Fenster ist bzw. welches das letzte aktive Fenster war (verliert ja den Focus beim klicken auf das Menü.


Anmelden zum Antworten