Domanda

Esiste un modo in cui posso impostare ShowDialog () in modo che non sia al primo posto? Ho esaminato tutte le relative domande SO, e nessuna del tutto corrisponde alla mia situazione.

Quello che faccio è aprire un nuovo WinForm da una colonna del pulsante Datagridview. Questo nuovo modulo estrae informazioni da alcune tabelle SQLite e consente all'utente di aggiungere informazioni alla riga in cui è stato fatto clic sul pulsante.

Apro WinForm usando il codice qui sotto. Uso il metodo ShowDialog () in modo da poter dire se l'utente salva le informazioni nel modulo o le annulla.

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

Faccio questo in modo da poter dire se devo ricaricare le informazioni nella datagridview.

Le informazioni che l'utente può inserire nella finestra provengono da altre fonti, come un browser Web, quindi avere il modulo in cima a tutte le applicazioni non è l'ideale.

Esiste un modo in cui posso impedire alla finestra di essere in cima a tutte le applicazioni (il più in alto nella mia serie di finestre va bene), o c'è un modo per dire quale pulsante fa clic su un utente in un altro modulo (sostanzialmente, utilizzando paywindow.Show () e cercando un diverso tipo di ritorno)?

Grazie per l'aiuto!

È stato utile?

Soluzione

usa qualcosa del genere: 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);
        }

quindi chiudi form2, FormIsClosing fuochi e puoi prenderlo da1;)

Altri suggerimenti

Per impostazione predefinita, un modulo non dovrebbe essere TopMost in " per tutte le applicazioni senso " ;. Se riscontri questo comportamento, è probabile che la proprietà sia stata impostata nella finestra di progettazione. Disinserire la proprietà nel designer o provare quanto segue.

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

Non ho trovato un modo per impedire al modulo di essere il massimo quando mostrato con ShowDialog () (mostra il modulo come modale e non so come ignorare esso).

Tuttavia, ho trovato un modo per cercare il secondo modulo, quando mostrato con Show () , osservando l'evento form.Disposed in questa domanda StackOverflow .

Da 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; 
}

Per quanto posso dire, questo non mi permette di vedere perché il modulo è stato chiuso (come con DialogResult ), quindi l'evento si attiva ogni ogni volta che il modulo si chiude, il che va bene per la mia situazione.

paywindow.ShowDialog(this)

dovrebbe funzionare. il parametro aggiuntivo indica com'è il genitore e lo farà sovrapporre al genitore, ma non al massimo. In alto indica che la finestra si attaccherà sul desktop anche quando si attiva un'altra finestra. Questo non è un comportamento predefinito per ShowDialog. Come accennato da JaredPar, imposta il tuo modulo / finestra su TopMost = false per essere vero.

paywindow.ShowDialog(this)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top