tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
2511
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von sinamine
    sinamine sinamine ist offline Mitglied Silber
    Registriert seit
    Jul 2007
    Beiträge
    59
    Hallo Leute.

    Habe einen modalen Dialog und wenn ich in einem Feld keine Eingabe mache, so zeige ich einen weiteren modalen Dialog an, dass in dem einen Feld eine Eingabe gemacht werden muss. Mein Problem allerdings ist, dass mein zweiter modaler Dialog hinter dem ersten Dialog angezeigt wird. Wie bringe ich den zuletzt geöffneten Dialog in den Vordergrund?

    Danke im Vorraus
    LG @ll
     

  2. #2
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    Hallo,

    von welchem Formular aus öffnest du denn den zweiten Dialog, evtl. ist ja der Bezug der Modalität zum darunter liegenden Formular nicht ganz richtig eingestellt. Der zweite Dialog müsste (wenn mich nicht alles täuscht), vom ersten Dialog aus modal aufgerufen werden. Zeig am besten mal deinen Code.

    Und überprüf am besten nochmal für den ersten Dialog, ob da die Eigenschaft "AlwaysOnTop" deaktiviert ist - falls es die überhaupt noch gibt, habe lange nichts mehr mit SWF gemacht.

    Grüße, D.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  3. #3
    martinpriebe martinpriebe ist offline Mitglied Gold
    Registriert seit
    Mar 2007
    Beiträge
    125
    Hi,

    myDialog.BringToFront();

    Der Befehl müßte das Fenster auf die oberste Ebene schieben.

    Aber richtig ist das normalerweise er über dem ersten erscheinen müßte.


    mfg
    Martin
     

  4. #4
    Avatar von sinamine
    sinamine sinamine ist offline Mitglied Silber
    Registriert seit
    Jul 2007
    Beiträge
    59
    Mein erster Dialog ist ein Formular, welches folgendermaßen aufgerufen wird:

    Code :
    1
    2
    3
    4
    5
    6
    
    DokumentWizzard wizz = new DokumentWizzard();
    wizz.availableDocuments = availableDocuments;
    if (wizz.ShowDialog() == DialogResult.OK) //also modal
    {
       //etc....
    }

    in diesem Dialog gibt es ein Feld, in dem eine Nummer eingetragen werden muss. Wenn man auf den Button Ok klickt und das Feld ist leer, so mache ich folgendes:

    Code :
    1
    2
    3
    4
    
    private MessageBoxDlg MessageDlg = new MessageBoxDlg();
     
    MessageDlg.BringToFront();
    MessageDlg.Show("Bitte geben Sie eine Nummer ein!");

    Mein MessageDlg ist auch von Form abgeleitet und meine Show Methode sieht folgendermaßen aus:

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    
    public void Show(string message)
            {
                //Um einen Hinweis anzuzeigen (z.B. ein Feld wurde nicht ausgefüllt)
                lblMessage.Text = message;
                this.Text = "";
     
                ShowDialog(); //Dialog wird als modaler Dialog aufgerufen, erscheint allerdings im Hintergrund von DokumentWizzard!
            }

    Hoffe, dass mir jemand sagen kann, warum mein Dialog im Hintergrund aufgerufen wird?! Eine Eigenschaft wie AlwaysOnTop gibt es nicht. Mit .BringToFront() bleibt mein Dialog trotzdem hinter dem DokumentWizzard-Dialog!

    Ich programmiere im VS 2005.

    LG @ll
     

  5. #5
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    Hi,

    was ist denn MessageBoxDlg für eine Klasse? Die stammt nicht aus dem normalen Umfang des .net-Frameworks, oder?

    Ich würde mal annehmen, dass diese MessageBoxDlg-Klasse durch den Aufruf von Show() "weniger modal" angezeigt wird als der andere Dialog, also eine niedrigere Priorität hat. Sprich: Der erste Dialog bleibt modal, der zweite wird nur als "normales" Fenster angezeigt.

    Du könntest versuchen, den zweiten Dialog auch als eigenes Formular zu gestalten und dann über die ShowDialog()-Funktion aufzurufen. Oder du machst den ersten Dialog unsichtbar, während du den zweiten anzeigst.

    Hoffe, das hilft dir.

    Grüße, D.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  6. #6
    Avatar von sinamine
    sinamine sinamine ist offline Mitglied Silber
    Registriert seit
    Jul 2007
    Beiträge
    59
    Mein MessageBoxDlg ist von Form abgeleitet - also ein Formular. In der Methode
    Code :
    1
    
    Show(string message)
    rufe ich ja this.ShowDialog() auf, also müsste mein MessageBoxDlg modal angezeigt werden?!

    Mein Ziel ist es, eine MessageBox mehr oder weniger nachzubauen, also ich habe eine zweite Methode Show, in welcher ich eine Message, einen Titel, das Icon und die Buttons mitübergebe:

    Code :
    1
    
    public DialogResult Show(string message, string title, eButtons buttons, eIcon icon)

    in dieser Funktion rufe ich genauso .ShowDialog() auf und es funktioniert.

    Wahrscheinlich liegt es allerdings daran, dass ich meine Show-Methode mit den 4 Parametern nur aus der Hauptapplikation aufrufe und nicht von einem bereits angezeigten modalen Dialog?! Kann es einfach sein, dass ich von einem modalen Dialog aus keinen weiteren modalen Dialog aufrufen kann? Eigentlich nicht, oder?
    Ich denke mir, dass es doch machbar sein muss aus einem modalen Dialog einen weiteren anzuzeigen?!
     

  7. #7
    Registriert seit
    Nov 2001
    Ort
    Gießen
    Beiträge
    4.091
    Hallo,

    also von einem modalen Dialog aus kann zumindest eine normale MessageBox aufrufen, die dann darüber auch wieder modal angezeigt wird. Kann durchaus sein, dass ich damit jetzt falsch liege, aber... soweit ich mich erinnere, wird ein modales Fenster immer modal zu einem anderen angezeigt, die Modalität ist also relativ zu einem anderen Fenster. Soll heißen: Der Dialog ist immer modal zu dem Fenster, von dem aus er aufgerufen wurde. Versuch einfach mal, den zweiten Dialog aus dem ersten heraus anzuzeigen.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    // im ersten Dialog, beim Klicken auf den OK-Button:
    private void OnButtonOkClick(...)
    {
        if(TextBox1.Text == "")
        {
            MessageBoxDlg dlg = new MessageBoxDlg();
            dlg.ShowModal();
        }
    }

    Grüße, D.
     
    "You could say that I was too lazy to calculate and so I invented the computer." -- Konrad Zuse

  8. #8
    Avatar von sinamine
    sinamine sinamine ist offline Mitglied Silber
    Registriert seit
    Jul 2007
    Beiträge
    59
    Hab die Lösung gefunden:

    muss einfach den Owner angeben:

    Code :
    1
    
    MessageDlg.ShowDialog([B]this[/B]);

    d.h. wenn ich meine Show-Methode aufrufe, übergebe ich einfach noch zusätzlich den owner und der Dialog wird richtig angezeigt!

    Eigentlich eh logisch!

    Danke für eure Hilfe. Der letzte Post hat mich darauf gebracht.
     

Ähnliche Themen

  1. Nicht-modalen Dialog mittels OnLButtonDblClk() auslösen
    Von Cappaja im Forum VisualStudio & MFC
    Antworten: 2
    Letzter Beitrag: 17.07.09, 16:29
  2. Zugriff auf modalen Dialog
    Von jb007 im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 1
    Letzter Beitrag: 14.05.07, 21:26
  3. Schriftart im Modalen Dialog ändern?
    Von Apollo75 im Forum VisualStudio & MFC
    Antworten: 6
    Letzter Beitrag: 05.06.06, 10:35
  4. Antworten: 5
    Letzter Beitrag: 24.05.05, 12:49
  5. Statusleiste für modalen Dialog als Hauptfenster
    Von sdi im Forum VisualStudio & MFC
    Antworten: 1
    Letzter Beitrag: 02.11.04, 13:40