Frage

Gibt es eine Möglichkeit ich einen Showdialog einstellen () oberste nicht sein? Ich habe bei allen im Zusammenhang SO Fragen sieht und keine ganz angepasst meine Situation.

Was ich tue, ist offen eine neue Windows Forms aus einer Datagridview-Knopfspalte. Diese neue Form Informationen von einigen SQLite Tabellen zieht und ermöglicht dem Benutzer Informationen zu der Zeile hinzufügen die Schaltfläche geklickt wurde.

Ich öffne die WinForm den Code unten. Ich benutze der Showdialog () -Methode, so kann ich sagen, wenn der Benutzer die Informationen in Form speichert oder löscht sie.

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

Ich tue dies, so kann ich sagen, wenn ich die Informationen im Datagridview neu geladen werden müssen.

Die Informationen der Benutzer in das Fenster füllen kann, ist aus anderen Quellen, wie ein Web-Browser, so kann die Form aller Anwendungen auf, die nicht ideal ist.

Gibt es eine Möglichkeit ich das Fenster entfernt, auf der alle Anwendungen stoppen kann (Top-die meisten in meiner Reihe von Fenstern ist in Ordnung), oder ist es eine Möglichkeit zu sagen, welche Taste ein Benutzer auf einem anderen Formular klickt (im Grunde, mit paywindow.Show() und gerade für eine andere Art von Rückkehr)?

Vielen Dank für jede Hilfe!

War es hilfreich?

Lösung

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, FormIsClosing Feuer und Sie können es in von1 fangen;)

Andere Tipps

Standardmäßig sollte ein Formular, das nicht in dem „für alle Anwendungen Sinn“ TopMost sein. Wenn Sie dieses Verhalten sind zu sehen, es ist wahrscheinlich, weil die Eigenschaft im Designer festgelegt wurde. Entweder ungesetzt die Eigenschaft im Designer oder versuchen, die folgenden.

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

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 einen Weg für die zweite Form zu sehen, wenn sie mit Show() gezeigt, durch das form.Disposed Ereignis beobachtet in diese Frage Stackoverflow .

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 das beurteilen kann, ist diese mir nicht erlauben, zu sehen, warum das Formular geschlossen wurde (wie bei DialogResult), so das Ereignis ausgelöst alle Zeit die Form schließt, die in Ordnung ist meine Situation.

paywindow.ShowDialog(this)

sollte funktionieren. die zusätzlichen Parameter erzählen, wie die Eltern und werden es auf der Oberseite der Eltern machen Schicht, aber nicht oberste. Topmost bedeutet, dass das Fenster auf dem Desktop bleiben, um sogar, wenn Sie ein anderes Fenster aktiviert. Das ist nicht das Verhalten für einen Showdialog Standard. Wie JaredPar erwähnt, setzen Sie das Formular / Fenster TopMost = false wahr zu sein.

paywindow.ShowDialog(this)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top