Pergunta

Existe uma maneira eu posso definir um ShowDialog () para não ser mais alto? Eu olhei para todas as perguntas tão relacionado, e nenhum muito combinava minha situação.

O que faço é abrir uma nova WinForm de uma coluna de botão datagridview. Esta nova forma extrai informações de algumas mesas SQLite e permite ao usuário adicionar informações para a linha o botão foi clicado.

Eu abro a WinForm usando o código abaixo. Eu uso o método ShowDialog () para que eu possa dizer se o usuário salva as informações na forma ou cancela-lo.

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

Eu faço isso para que eu possa dizer se eu precisar recarregar as informações no datagridview.

As informações o usuário pode preencher na janela é de outras fontes, como um navegador web, assim que ter a forma estar no topo de todas as aplicações não é ideal.

Existe uma maneira eu posso parar a janela de estar no topo de todas as aplicações (mais alto em minha série de janelas é bom), ou se há uma maneira de dizer qual botão o usuário clica em uma outra forma (basicamente, usando paywindow.Show() e assistindo para um tipo diferente de retorno)?

Obrigado por qualquer ajuda!

Foi útil?

Solução

usar algo como isto: 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);
        }

então você fechar o form2, FormIsClosing incêndios e você pode pegá-lo no partir de 1;)

Outras dicas

Por padrão, uma forma não deve ser mais alto no "para todas as aplicações sentido". Se você está vendo que o comportamento é provável porque a propriedade foi definida no designer. Quer retirar a propriedade no designer ou tente o seguinte.

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

Eu não encontrei uma maneira de impedir a forma de ser-top mais quando mostrado com ShowDialog() (este mostra a forma como um modal, e eu não sei como a substituí-lo).

No entanto, eu encontrei uma maneira de prestar atenção para a segunda forma, quando mostrado com Show(), prestando atenção para o evento form.Disposed em esta questão StackOverflow .

A partir 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; 
}

Tanto quanto eu posso dizer, isso não me permite ver por que o formulário foi fechado (como com DialogResult), de modo que o evento é acionado todas tempo o fecha forma, que é bom para minha situação.

paywindow.ShowDialog(this)

deve funcionar. o parâmetro adicional conta como o pai é, e torná-lo camada em cima do pai, mas não superior. meios de nível superior da janela vai ficar em torno de sua área de trabalho, mesmo quando você ativar outra janela. Isso não é comportamento padrão para um ShowDialog. Como JaredPar mencionado, definir a sua forma / janela para TopMost = false para ser verdade.

paywindow.ShowDialog(this)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top