none
Como impedir que isso aconteça? MDI e seus filhinhos. RRS feed

  • Pergunta

  • Bom, criei um formulario MDI e outros para serem seus filhos.
    Executo o seguinte codigo para chamar os filhos:

    //evento click do menu
    {
        frmVendas frmFilhoVendas = new frmVendas();
        frmFilhoVendas.MDIParent = this;
        frmFilhoVendas.Show();
    }


    Ok, o formulario filho aparece bonitinho. O problema é que se eu dou mais um click aparece outro formulario igual. Se eu der mais outro, também. Como eu posso evitar isso?
    Grato a todos.
    segunda-feira, 18 de dezembro de 2006 15:14

Respostas

  • Olá Edmar..

    vc poderia verificar a instância desse objeto...

    mais ou menos assim....

    foreach (Form frm in this.MdiChildren)

    {

        if (frm is FormCliente)

        {

                frm.BringToFront();

          }

    }

    // se caso não for... cria uma nova instância do seu form, e o chama ( show )...

    {

    Form2 ObjForm = new Form2;

    ObjForm.MdiParent = this;

    ObjForm.Show();

    }



    Espero ter ajudado, desde já, Iter Vinícius, se caso sim, marque-a como tal...

    Abraço...
    terça-feira, 19 de dezembro de 2006 19:30

Todas as Respostas

  • Olá Edmar..

    vc poderia verificar a instância desse objeto...

    mais ou menos assim....

    foreach (Form frm in this.MdiChildren)

    {

        if (frm is FormCliente)

        {

                frm.BringToFront();

          }

    }

    // se caso não for... cria uma nova instância do seu form, e o chama ( show )...

    {

    Form2 ObjForm = new Form2;

    ObjForm.MdiParent = this;

    ObjForm.Show();

    }



    Espero ter ajudado, desde já, Iter Vinícius, se caso sim, marque-a como tal...

    Abraço...
    terça-feira, 19 de dezembro de 2006 19:30
  • Olá Iter.
    Primeiramente obrigado por responder minha dúvida. Vou testar e ver se funciona (bom, deve funcionar).

    quarta-feira, 20 de dezembro de 2006 10:59
  • Legal Edmar,

    Qualquer coisa replay neste tópico, ou marque como tal...

    Abraço, espero ter ajudado...
    quarta-feira, 20 de dezembro de 2006 13:08
  • Bom na minha aplicação só deixo abrir um form por vez dentro do MDI.

    Utilizo esta função para sempre q abrir um novo Form , feche os outros ...

    private void CloseForms()

    {

    bool blnTemFilhos = this.HasChildren;

    int filhos = this.MdiChildren.Length;

    if (blnTemFilhos)

    {

    for (int i = 0; i < filhos; i++)

    {

    this.MdiChildren[ i ].Close();

    }

    }

    }

    Evento do click de um menu ...

    private void veículoToolStripMenuItem_Click(object sender, EventArgs e)

    {

    // Fecha os forms ativos

    CloseForms();

    // Mostra o form desejado

    ViewVeiculo();

    }

    A performance esta boa ... esta funcionando legal

    quarta-feira, 20 de dezembro de 2006 14:00
  • Código mais simples:

    //Fecha Todos os Forms Abertos!
    foreach (Form f in this
    .MdiChildren)
    f.Close();

    quinta-feira, 21 de dezembro de 2006 14:33
  • Fiz o codigo abaixo para facilitar esse problema.

     
    So não usa o overload com o ToolStripContainer , pois esse controle e um lixo.

     

    Para abrir o form basta colocar a chamada abaixo dentro do Mdi Form

     

    UIForm.ShowStatic(new FrmTaxasRemuneracao(), this);

     

     

    Code Snippet

    #region UIForm

    public class UIForm

    {

    public static void ShowStatic(Form myfrmShow, Form myMdiParent)

    {

    foreach (Form childForm in myMdiParent.MdiChildren)

    {

    if (childForm.Name == myfrmShow.Name)

    {

    childForm.Focus();

    return;

    }

    }

    Show(myfrmShow, myMdiParent);

    }

    public static void ShowStatic(Form myfrmShow, Form myMdiParent, ToolStripContainer toolContainer)

    {

    foreach (Form childForm in toolContainer.ContentPanel.Controls)

    {

    if (childForm.Name == myfrmShow.Name)

    {

    childForm.Focus();

    return;

    }

    }

    Show(myfrmShow, myMdiParent, toolContainer);

    }

    public static void Show(Form myfrmShow, Form myMdiParent, ToolStripContainer toolContainer)

    {

    myfrmShow.MdiParent = myMdiParent;

    toolContainer.ContentPanel.Controls.Add(myfrmShow);

    myfrmShow.Show();

    }

    public static void Show(Form myfrmShow, Form myMdiParent)

    {

    Show(myfrmShow, myMdiParent, null);

    }

    public static void Clear(Form frm)

    {

    foreach (Control ctl in frm.Controls)

    {

    if (ctl is TextBox) ctl.Text = string.Empty;

    }

    }

    }

    #endregion

     

    quinta-feira, 24 de maio de 2007 23:51