Tengo un formulario Form1
del cual visualizo Form2
como formulario modal. Desde Form2
hago todo tipo de edición y eliminación de diferentes conjuntos de valores que deben reflejarse en Form1
después de cerrar Form2
. Entonces, lo que hago es RePopulateControls_in_Form1()
después de cerrar Form2
. Dado que RePopulateControls_in_Form1()
es un proceso largo, quiero ejecutar ese método solo si ocurre alguna modificación (editar, agregar, borrar) en Form2
y no cuando se acaba de abrir y cerrar Form2
.DialogResult que no cierra el formulario?
Así que esto es lo que trato de hacer en Form1
:
Form2 f = new Form2();
if (f.ShowDialog(this) == DialogResult.Something)
RePopulateControls_in_Form1()
Y luego, en Form2 hago,
private void bntEdit()
{
//If Edit?
this.DialogResult = DialogResult.Something;
}
private void bntAdd()
{
//If Add?
this.DialogResult = DialogResult.Something;
}
private void bntDelete()
{
//If Delete?
this.DialogResult = DialogResult.Something;
}
Pero mi problema es .Something
. Si se trata de algo distinto de .None
, Form2
simplemente se cierra. No quiero que Form2
simplemente se cierre solo a menos que el usuario lo cierre.
Si hago esto:
RePopulateControls_in_Form1()
no es golpeado!
En resumen, en mi programa, ¿cómo puedo decirle al compilador que llame al RePopulateControls_in_Form1()
solo si los valores se modifican en Form2
?
Nota: La repoblación es necesaria ya que los controles se crean dinámicamente y son un poco complejos (en realidad, lo que se crea en Form2
son los controles de la GUI y sus etiquetas, etc.).
OK ¡Obtengo la primera parte, pero la segunda lógica no es una técnica de codificación adecuada! – nawfal
¿Por qué no lo es? En el caso anterior, usaría un evento. Sin embargo, si hay un valor que se utiliza en una aplicación que tiene 20 formularios y diez veces más que muchas clases, ¿cómo se aseguraría de que solo se use un valor? ¿Prefiere pasar el valor de la forma a la forma y de la clase a la clase a través de un parámetro o propiedades del constructor ... – ScruffyDuck
Esto es algo tan simple como simplemente configurar una bandera para que Form1 sepa algo sobre Form2.¿Por qué una variable global que no es segura para subprocesos? Entiendo la importancia de una variable global general cuando tienes que usarla en 220 clases como mencionas arriba. Pero aquí, no solo debemos evitar las variables estáticas, que duermen a lo largo de todo el ciclo de vida de la aplicación, tanto como sea posible, pero lo que es más importante, me pregunto cómo prevería que el requisito mencionado en la pregunta fuera algo así como grande como para ser empleado en 220 clases de mi pregunta simple :) – nawfal