Usuário com melhor resposta
Como impedir que isso aconteça? MDI e seus filhinhos.

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.
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...
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... -
-
-
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
-
-
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
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