Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   .NET (http://www.forosdelweb.com/f29/)
-   -   Evitar que se abra la misma ventana (http://www.forosdelweb.com/f29/evitar-que-abra-misma-ventana-388134/)

RootK 24/04/2006 12:13

Evitar que se abra la misma ventana
 
Hola, muchos han preguntado en aplicaciónes de escritorio como evitar que cuando dés un click se abra la Forma y que si lo vuelves a presionar no se vuelva a abrir... pues bien.. aqui les dejo un ejemplo que por cierto va a estar disponible también en las faq´s...

Ejemplo para Formularios MDI

Supongamos que tengo Form1 y Form2.

Form1 (parent) uno tiene un boton para abrir el Form2 (child) de ésta forma:

C#
Cita:

private void button1_Click(object sender, System.EventArgs e) {
Form2 childForm = null;
//Barremos las formas que hay en el parent para encontrar la referencia
foreach(Form f in this.MdiChildren) {
if(f is Form2) {
childForm = (Form2) f;
break;
}
}
//Si la encontró ya no necesita la instancia solo la mostramos
if( childForm != null) {
childForm.Show();
childForm.Focus();
}
else {
//No se ha creado por lo tanto generamos la instancia
childForm = new Form2();
childForm.MdiParent = this;
childForm.Show();
childForm.Focus();
}

}
VB.Net
Cita:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim childForm As Form2
//Barremos las formas que hay en el parent para encontrar la referencia
For Each f As Form In Me.MdiChildren
If TypeOf f Is Form2 Then
childForm = CType(f, Form2)
Exit For
End If
Next
'Si la encontró ya no necesita la instancia solo la mostramos
If Not (childForm Is Nothing) Then
childForm.Show()
childForm.Focus()
Else
'No se ha creado por lo tanto generamos la instancia
childForm = New Form2
childForm.MdiParent = Me
childForm.Show()
childForm.Focus()
End If
End Sub

RootK 24/04/2006 15:54

Por cierto, les mando el ejemplo para un formulario normal (porque el ejemplo de arriba es para MDI)

C#
Cita:

private void button1_Click(object sender, System.EventArgs e) {
foreach (Form f in this.OwnedForms) {
if (f is Form2) {
f.Show();
f.Focus();
return;
}
}

Form2 f2 = new Form2();
this.AddOwnedForm(f2);
f2.Owner = this;
f2.Show();

}
y en el formulario 2 no olviden liberarlo...

Cita:

private void Form2_Closing(object sender, System.ComponentModel.CancelEventArgs e) {
Owner.RemoveOwnedForm(this);
}
vb.net

Cita:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

For Each f As Form In Me.OwnedForms
If TypeOf f Is Form2 Then
f.Show()
f.Focus()
Exit Sub
End If
Next

Dim f2 As New Form2
Me.AddOwnedForm(f2)
f2.Owner = Me
f2.Show()

End Sub
Formulario 2:

Cita:

Private Sub Form2_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
Owner.RemoveOwnedForm(Me)
End Sub
Salu2 y cualquier comentario es bienvenido.. :arriba:


La zona horaria es GMT -6. Ahora son las 06:23.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.