modalen Dialog im Vordergrund anzeigen

sinamine

Mitglied
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
 
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.
 
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
 
Mein erster Dialog ist ein Formular, welches folgendermaßen aufgerufen wird:

Code:
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:
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:
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
 
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.
 
Mein MessageBoxDlg ist von Form abgeleitet - also ein Formular. In der Methode
Code:
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:
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?!
 
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:
// im ersten Dialog, beim Klicken auf den OK-Button:
private void OnButtonOkClick(...)
{
    if(TextBox1.Text == "")
    {
        MessageBoxDlg dlg = new MessageBoxDlg();
        dlg.ShowModal();
    }
}

Grüße, D.
 
Hab die Lösung gefunden:

muss einfach den Owner angeben:

Code:
MessageDlg.ShowDialog(this);

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! :D

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

Neue Beiträge

Zurück