2009-05-03 8 views
1

Gibt es eine Möglichkeit, ein ShowDialog() nicht zu oberst zu setzen? Ich habe alle verwandten Fragen SO angesehen, und keine ganz meine Situation abgestimmt.Kann ich ShowDialog() so einstellen, dass es nicht oben liegt?

Was ich tue, ist ein neues WinForm aus einer Datagridview Button-Spalte zu öffnen. Dieses neue Formular ruft Informationen aus einigen SQLite-Tabellen ab und ermöglicht dem Benutzer das Hinzufügen von Informationen zu der Zeile, auf die die Schaltfläche geklickt wurde.

Ich öffne das WinForm mit dem folgenden Code. Ich verwende die ShowDialog() -Methode, damit ich feststellen kann, ob der Benutzer die Informationen im Formular speichert oder löscht.

Pay_Bill_Window paywindow = new Pay_Bill_Window(getClickedRowID); 
if (paywindow.ShowDialog() == DialogResult.OK) 
{ 
    FillPendingPaymentDataGrid(dbAccess.GetPendingBills()); 
} 

Ich mache das, damit ich sagen kann, ob ich die Informationen im datagridview neu laden muss.

Die Informationen, die der Benutzer in das Fenster eingeben kann, stammen aus anderen Quellen, wie z. B. einem Webbrowser. Daher ist es nicht ideal, wenn das Formular oben auf allen Anwendungen angezeigt wird.

Gibt es eine Möglichkeit, ich kann das Fenster von oben auf allen Anwendungen (am besten in meiner Reihe von Fenstern ist in Ordnung), oder gibt es eine Möglichkeit zu sagen, welche Schaltfläche ein Benutzer auf ein anderes Formular klickt (im Grunde , mit paywindow.Show() und für eine andere Art von Rückkehr zu beobachten)?

Danke für jede Hilfe!

Antwort

1

Verwendung etwas wie folgt aus: form1:

private void button1_Click(object sender, EventArgs e) 
     { 
      Form2 frm = new Form2(); 
      frm.Show(); 
      frm.FormIsClosing += frm_FormIsClosing; 

     } 

     void frm_FormIsClosing(object sender, DialogResult rsl) 
     { 
      if (rsl == System.Windows.Forms.DialogResult.Yes) 
       MessageBox.Show("We got it"); 
     } 

form2:

public delegate void IsClosing(object sender, DialogResult rsl); 

     public event IsClosing FormIsClosing; 


     private void Form2_FormClosed(object sender, FormClosedEventArgs e) 
     { 
      FormIsClosing(this, System.Windows.Forms.DialogResult.Yes); 
     } 

dann schließen Sie die form2, Brände FormIsClosing und man kann es in von1 fangen;)

+0

Ich war mir ziemlich sicher, dass das funktionieren würde, aber ich konnte nie die Ereignisse Form2_FormClosed oder Form2_FormClosing auslösen. Ich habe eine Antwort gefunden, die darauf wartet, dass form2 in einer anderen SO-Frage entsorgt wird. Vielen Dank! –

+2

sollten Sie Form2_FormClosed zum geschlossenen Ereignis von form2 hinzufügen! Wie auch immer, viel Glück – Sadegh

+0

Nicht sicher, was ich beim ersten Mal gemacht habe, aber ich habe das FormClosed-Ereignis überprüft und es wurde nicht richtig implementiert - das ist die Lösung, die ich brauche - danke! –

-1
paywindow.ShowDialog(this) 
+0

was ist das, nicht wahr? – Sadegh

+0

das übergeordnete Element des Dialogfelds – DaDa

+0

ich weiß, aber es ist Unsinn, es ist überhaupt nicht auf Frage, nur versuchen Sie es – Sadegh

1

Standardmäßig sollte ein Formular im Sinne von "für alle Anwendungen" nicht TopMost sein. Wenn Sie dieses Verhalten bemerken, liegt das wahrscheinlich daran, dass die Eigenschaft im Designer festgelegt wurde. Entweder die Eigenschaft im Designer aufheben oder Folgendes versuchen.

using (Form form = CreateMyForm()) { 
    form.TopMost = false; 
    form.ShowDialog(parent); 
    ... 
} 
+0

Das Problem ist, dass ich das Formular mit ShowDialog() statt Show() öffne. Laut MSDN/Google öffnet ShowDialog() ein modales Formular, das eine Interaktion erfordert, bevor es zum übergeordneten Formular zurückkehrt. Ich denke, Ihre Methode würde funktionieren, wenn ich das Formular mit Show() öffnen würde. –

0

Ich habe keine Möglichkeit, zu verhindern, dass das Formular zu sein Top-am meisten, wenn gezeigt mit ShowDialog() (dies zeigt die Form als modal, und ich weiß nicht, wie es außer Kraft zu setzen) gefunden.

Allerdings fand ich eine Möglichkeit, für die zweite Form zu sehen, wenn mit Show() gezeigt, indem Sie für die form.Disposed Ereignis in this StackOverflow question.

Von Ian:

Form2 form2 = null; 

void button_click(object sender, EventArgs e) 
{  
    if(form2 == null) 
    { 
     form2 = new Form2(); 
     form2.Disposed += new EventHandler(f_Disposed); 
     form2.Show(); 
    } 
} 

void f_Disposed(object sender, EventArgs e) 
{ 
    form2 = null; 
} 

Soweit ich sagen kann, diese mir nicht erlaubt, zu sehen, warum die Form (wie bei DialogResult) geschlossen wurde, so das Ereignis ausgelöst jeder Zeit die Form schließt, was für meine Situation in Ordnung ist.

0
paywindow.ShowDialog(this) 

sollte funktionieren. Der zusätzliche Parameter gibt an, wie das Elternelement ist und wird es über dem übergeordneten Element, aber nicht über dem übergeordneten Element erstellen. Oberste bedeutet, dass das Fenster auf Ihrem Desktop bleiben wird, selbst wenn Sie ein anderes Fenster aktivieren. Das ist kein Standardverhalten für einen ShowDialog.Wie in JaredPar erwähnt, setzen Sie Ihr Formular/Fenster auf TopMost = false, um wahr zu sein.

Verwandte Themen