Pregunta

¿Hay alguna manera de configurar un ShowDialog () para que no sea el más alto? He examinado todas las preguntas de SO relacionadas, y ninguna se ha adaptado a mi situación

Lo que hago es abrir un nuevo WinForm desde una columna de botón datagridview. Este nuevo formulario extrae información de unas pocas tablas de SQLite y permite al usuario agregar información a la fila donde se hizo clic en el botón.

Abro el WinForm usando el siguiente código. Utilizo el método ShowDialog () para saber si el usuario guarda la información en el formulario o la cancela.

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

Hago esto para saber si necesito volver a cargar la información en la vista de datos.

La información que el usuario puede llenar en la ventana proviene de otras fuentes, como un navegador web, por lo que no es ideal tener el formulario encima de todas las aplicaciones.

¿Hay alguna forma de evitar que la ventana se encuentre en la parte superior de todas las aplicaciones (la parte superior de mi serie de ventanas está bien), o hay una manera de saber qué botón hace clic en otro formulario (básicamente, ¿Utiliza paywindow.Show () y busca un tipo de devolución diferente?

¡Gracias por cualquier ayuda!

¿Fue útil?

Solución

usa algo como esto: 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);
        }

luego cierra Form2, FormIsClosing incendios y puede capturarlo en from1;)

Otros consejos

De forma predeterminada, un formulario no debe ser TopMost en " para todas las aplicaciones sense " ;. Si ve ese comportamiento, es probable que la propiedad se haya configurado en el diseñador. Desarma la propiedad en el diseñador o prueba lo siguiente.

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

No he encontrado una manera de evitar que el formulario sea superior cuando se muestra con ShowDialog () (esto muestra el formulario como modal, y no sé cómo anular it).

Sin embargo, encontré una forma de ver el segundo formulario, cuando se muestra con Show () , mirando el evento form.Disposed en esta pregunta de StackOverflow .

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

Por lo que puedo decir, esto no me permite ver por qué se cerró el formulario (como con DialogResult ), por lo que el evento se dispara cada cada vez que el formulario se cierra, lo cual está bien para mi situación.

paywindow.ShowDialog(this)

debería funcionar. el parámetro adicional indica cómo está el padre y lo hará en capas encima del padre, pero no en la parte superior. Superior significa que la ventana se quedará en tu escritorio incluso cuando actives otra ventana. Ese no es el comportamiento predeterminado para un ShowDialog. Como mencionó JaredPar, establezca su formulario / ventana en TopMost = false para que sea verdadero.

paywindow.ShowDialog(this)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top