Variable pública VB.NET

ArcheR

Buenas.

El tema es sencillo (o eso creía). En mi proyecto VB.NET tengo un módulo con variables públicas. El tema es que tengo una que se llama "Repetir", que la tengo con un valor "1". En uno de las partes de la aplicación tengo esto:

Do Until Repetir = 0
    Dim AdminDirectores As New frmAdminDirectores
    AdminDirectores.ShowDialog()
Loop

De tal forma que, como "Repetir" está con valor "1", me abre ese formulario. Al cerrarlo me pregunta si quiero añadir otro director más, y si le doy que sí, simplemente me cierra el formulario ese y me vuelve a ese codigo que he puesto, y si le digo que no, también me vuelve a ese código, pero poniendo la variable "Repetir" a "0".

Por lo tanto, si a esa pregunta digo que sí, "Repetir" DEBERÍA seguir estando a "1", y por lo tanto repetiría el contenido del bucle hasta que le responda que no a esa pregunta. Pues nada, aunque le diga que sí, mágicamente la variable "Repetir" pasa de valor "1" a valor "0" cuando sale del formulario ese.

Gracias por la colaboración xD

NeB1

pon el código de la aplicación o algo más relevante almenos

ArcheR

Es que la aplicación tiene mucho código y muchos formularios y no sé qué parte pegar que pueda servir xD

SeiYa

Por que no haces algo como

Do Until blah.showdialog() = xxx

ArcheR

Es que el formulario lo creo dentro del Do, por lo que no puedo hacer referencia a él en el Until :\

EDIT: He hecho un proyecto distinto de lo más sencillo con 2 formularios simples para hacer la prueba del Do Until con la variable pública y funciona perfectamente, así que está claro que tengo que tener algo por ahí en el código que está trastocando esa variable. Lo revisaré a ver.

EDIT2: Vale, ya sé dónde está el problema, pero la solución a este problema ha hecho que me surja otro xD El tema es que en el formulario ese que hay dentro del Do Loop, en el evento "Closed" tenía puesto que "Repetir" se pusiese a "0", y claro, al salir de ese formulario, "Repetir" siempre se ponía a "0" (lógicamente xD). Quitando esa línea se arregla.

El problema ahora es que yo lo que quiero es que si en ese formulario yo no elijo nada, sino que le doy a la X de la esquina superior derecha, me ponga "Repetir" a "0", porque tal y como lo tengo ahora, si en ese formulario le doy a la X de arriba, me vuelve a sacar el formulario de nuevo (no sale del bucle). Alguna idea? xD

pRAXIS

Supongo que en vb.net habrá un evento form_close, onclose o closing (en c# existen), ese evento podrías capturarlo y hacer lo que necesitases.

ArcheR

Sí, pero ese evento controla el cerrado del formulario sea cual sea el método (mediante la X de arriba o mediante un Me.Close() en el código), y yo quiero poder añadir código exclusivamente para cuando cierre el formulario mediante la X.

pRAXIS

Entonces ten una variable booleana para saber si ha sido Me.Close() el que lanza el evento, así cuando se lance el evento closing compruebas esa variable y si esta a true sabes que se ha ejecutado antes Me.Close() si por el contrario se ha cerrado desde la X esa variable vendrá a false, no la declares static que sino compartirá el valor con las demás instancias de la clase.

ArcheR

Joder, es verdad, no se me había ocurrido eso de la variable. Gracias! xD

8 días después
kas

Quizas llego tarde pero Form.ShowDialog() devuelve un valor de tipo DialogResult, el cual es un enumerador.

En vez de cerrar el formulario, devuele un valor comprensible, como por ejemplo:

return DialogResult.Yes

o

return DialogResult.No

Tomara mas sentido cuando desde el bucle compares tu formulario:

Do Until formulario.ShowDialog() = DialogResult.Yes
Loop

Usuarios habituales

  • kas
  • ArcheR
  • pRAXIS
  • SeiYa
  • NeB1