Problema para acceder a variables públicas de formularios mdi desde el formulario padre
Publicado por José Luis Berrueco (4 intervenciones) el 15/07/2021 18:55:13
Estoy intentando programar un monitor de puertos serie con Formularios mdi, a efectos prácticos es como si fuera un editor de texto sencillo para que no entendamos. En los formularios hijo hay un ricktextbox1 donde se volcarán los datos leídos del correspondiente puerto serie. En el formulario padre tengo un menú ARCHIVO, con submenús ABRIR, GUARDAR, GUARDAR COMO, CERRAR, ...
En los formularios hijo he declarado dos variables publicas de tipo bool
En el evento Change del richtextbox modifico la variable cambios a true; Para que en la rutina de Cerrar, si está a true salga un messagebox advirtiendo de que no se han guardado los cambios y de las opciones de Guardar antes de cerrar, cerrar sin Guardar y Cancelar
En la rutina de Guardar Como cambio la variable de guardado a true, para que en la rutina de Guardar, si esta variables está a true guarde el texto directamente en el archivo sin pasar por el cuadro de dialogo SaveFile.
El problema que tengo es que estas variables publicas no las veo desde mi formulario padre y no se como hacerlo
Este es el código de la ruina de Cerrar
El código de detección del formulario hijo activo en parte lo he sacado de una web, el problema que tengo es que si para detectar el formulario hijo activo se hace con la clase Form, esta clase no tiene las propiedades de la clase FormHijo a la que pertenece el formulario hijo, y por tanto no son visibles sus variables públicas booleanas cambios y guardado. Esto no se como resolverlo
Si en vez de ser Formularios Mdi fueran formularios normales, desde uno si se pueden ver las variables publicas del otro.
Es mi primera experiencia con los formularios Mdi y me complican bastante la existencia y voy muy perdido.
Alguien sabe como modificar mi código pata poder ver la variable cambio del formulario hijo actrivo?
Gracias por la ayuda.
En los formularios hijo he declarado dos variables publicas de tipo bool
1
public bool cambios, guardado;
En el evento Change del richtextbox modifico la variable cambios a true; Para que en la rutina de Cerrar, si está a true salga un messagebox advirtiendo de que no se han guardado los cambios y de las opciones de Guardar antes de cerrar, cerrar sin Guardar y Cancelar
En la rutina de Guardar Como cambio la variable de guardado a true, para que en la rutina de Guardar, si esta variables está a true guarde el texto directamente en el archivo sin pasar por el cuadro de dialogo SaveFile.
El problema que tengo es que estas variables publicas no las veo desde mi formulario padre y no se como hacerlo
Este es el código de la ruina de Cerrar
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/private void menu14ToolStripMenuItem_Click(object sender, EventArgs e)
{
string titol, missatge;
MessageBoxButtons botons = MessageBoxButtons.YesNoCancel;
MessageBoxIcon icona = MessageBoxIcon.Warning;
DialogResult resultat;
//Detección del formulario hijo actvo
Form activeChildForm = this.ActiveMdiChild;
if (activeChildForm != null) //Si existe
{
if (ActiveChildForm.cambio==true) //Aquí falla mi codigo ya que la variable publica de la clase FromHijo, no es visible aquí en el Form padre, ya que el Hijo Activo se ha abierto como un Form y no como un FormHijo y no se como resolver esto
{
titol ="Warning";
missatge = "Data not saved. Do you want to close it without saving";
resultat=MessageBox.Show(missatge, titol, botons, icona);
//Si se elige si se cierra sin guardar
if (resultat== System.Windows.Forms.DialogResult.Yes)
{
activeChildForm.Close();
}
//Si se elige No, se guarda a teves de un SaveFileDialog y luego se cierra
if ((resultat == System.Windows.Forms.DialogResult.No))
{
Guardar();
activeChildForm.Close();
}
//Si se eleige Cancelar, se cierra el messagebox y no se hace nada
}
}
}
El código de detección del formulario hijo activo en parte lo he sacado de una web, el problema que tengo es que si para detectar el formulario hijo activo se hace con la clase Form, esta clase no tiene las propiedades de la clase FormHijo a la que pertenece el formulario hijo, y por tanto no son visibles sus variables públicas booleanas cambios y guardado. Esto no se como resolverlo
Si en vez de ser Formularios Mdi fueran formularios normales, desde uno si se pueden ver las variables publicas del otro.
Es mi primera experiencia con los formularios Mdi y me complican bastante la existencia y voy muy perdido.
Alguien sabe como modificar mi código pata poder ver la variable cambio del formulario hijo actrivo?
Gracias por la ayuda.
Valora esta pregunta


0