Principales respuestas
instancia formulario creada

Pregunta
-
buenas!
estoy haciendo un programa en visual net y quiero saber antes de que se cree una nueva instancia de un formulario (new) si ya existe alguna para cerrrarlo
la idea es que si desde un formulario se llama a otro varias veces solo se abra una vez con los ultimos datos llamados
saludos
Aran
Respuestas
-
hola
no creo que el como lo llamas sea el problema
lo que puedes hacer es verificar en que estado esta el formulario y cambiarlo
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
EstableceRegistro()
If form IsNot Nothing Then
Me.FormInstance.Close()
End If
Dim frm As frmPartidasMnto = Me.FormInstance
frm.Show()
If frm.WindowState = FormWindowState.Minimized Then
frm.WindowState = FormWindowState.Normal
End If
End Sub
Form.WindowState (Propiedad)
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Marcado como respuesta aticnet lunes, 22 de febrero de 2010 10:25
-
Todas las respuestas
-
hola
podrias ahcer algo como esto
public partial class Form1 : Form
{
private Form2 form = null;
private Form2 FormInstance
{
get
{
if (form == null)
{
form = new Form2();
form.Disposed += new EventHandler(form_Disposed);
}
return form;
}
}
void form_Disposed(object sender, EventArgs e)
{
form = null;
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Form2 frm = this.FormInstance;
frm.Show();
}
}
como veras la propeidad es la que abstrae la creacion del formulario y si esta creada la instancia puedes cerrarla
eso si esto funciona si lo ahces desde el form que abrio al form hijo, pero no desde otro lado
si necesitas hacerlo desde cualqueir parte debes usar
Application. OpenForms (Propiedad)
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
lo unico que he conseguido es que no me lo vuelva a abrir pero yo quiero que me lo abra con los nuevos datos, entiendo que primero tendra que cerrar, no se
no entiendo muy bien el codigo que me has puesto, la logica que tiene yo Lo estoy haciendo en visual he puesto:
'PRUEBA ABRIR SOLO 1
Private form As frmPartidasMnto = Nothing
Private ReadOnly Property FormInstance() As frmPartidasMnto
Get
If form Is Nothing Then
form =
New frmPartidasMnto(registro, mCalidad)
AddHandler form.Disposed, AddressOf form_Disposed
End If
Return form
End Get
End Property
Sub form_Disposed(ByVal sender As Object, ByVal e As EventArgs)
form =
Nothing
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
EstableceRegistro()
Dim frm As frmPartidasMnto = Me.FormInstance
frm.Show()
End Sub 'button1_Click
'FIN PRUEBA
Aran -
hola
esta muy bien como has convertido el codigo
Private form As frmPartidasMnto = Nothing
Private ReadOnly Property FormInstance() As frmPartidasMnto
Get
If form Is Nothing Then
form = New frmPartidasMnto(registro, mCalidad)
AddHandler form.Disposed, AddressOf form_Disposed
End If
Return form
End Get
End Property
Sub form_Disposed(ByVal sender As Object, ByVal e As EventArgs)
form = Nothing
End Sub
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
EstableceRegistro()
If form IsNot Nothing Then
Me.FormInstance.Close()
End If
Dim frm As frmPartidasMnto = Me.FormInstance
frm.Show()
End Sub
como veras detectas que ya hay una instancia y la cierras
acto seguido recuperas una nueva
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
-
por favor alguien me puede decir como hago para que al pasar el foco (pinchar con el raton) de un formulario a otro, el primero no se quede minimizado?
supondo que será la forma de llamarlo no se como hacerlo para que se mantengan los dos en su posicion y tamaño
gracias
Aran -
hola
no creo que el como lo llamas sea el problema
lo que puedes hacer es verificar en que estado esta el formulario y cambiarlo
Private Sub button1_Click(ByVal sender As Object, ByVal e As EventArgs) Handles Button1.Click
EstableceRegistro()
If form IsNot Nothing Then
Me.FormInstance.Close()
End If
Dim frm As frmPartidasMnto = Me.FormInstance
frm.Show()
If frm.WindowState = FormWindowState.Minimized Then
frm.WindowState = FormWindowState.Normal
End If
End Sub
Form.WindowState (Propiedad)
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina- Marcado como respuesta aticnet lunes, 22 de febrero de 2010 10:25
-
que hace que al pasar el foco de un formulario a otro unos se minimicen y sin embargo otros no?
no quiero que se minimicen nunca excepto a petición del usuario
creo que el problema viene de que en principio hice la aplicación con un mdi y ahora me piden ver muchos formulario a la vez
¿sería mejor sustituir el mdi por form normal con el menu principal de la aplicación?
Aran -
hola
no hace falta cambiar lo que has realziado en MDI, deberia funcionar sin problemas, la verdad es raro esto que comentas de minimizar los forms
puedes hacer unas pruebas para ver sino es problema del desarrollo en particualar
create un proyecto parte en una nuva solucion y arma un ejemplo simple de MDO con esta tencica para abrir formulario a ver si sucede lo mismo
sino sucede quiere decir que algun parte de tu codigo esta haciando que se minimize
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
no encuentro solucion al problema yo llamo al formulario tal y como me has indicado pero al picar sobre el otro, este queda minimizado
que evento tengo que programar cuando pierde el foco el formulario para que no se minimice?
he puesto este codigo pero no se ejecuta, pongo un punto de ruptura y ni siquiera pasa por aqui cuando pico en otro form
Private Sub frmPartidasMnto_LostFocus(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LostFocus
If Me.WindowState = FormWindowState.Minimized Then
Me.WindowState = FormWindowState.Normal
End If
End Sub
si le pongo owner=me
entonces lo que ocurre es que si se quedan los dos maximizados pero no pasa a primer plano y yo quiero que el form en primer plano sea el que tiene el foco en cada momento
gracias
Aran -