Vuelvo a preguntar mi problema, haber si alguien me hace caso

15/03/2006 - 19:37 por Yago | Informe spam
Hola tengo 2 forms llamados principal y afiliados, el problema es que cuando
le doy al boton cerrar del form afiliados me pregunta si quiero cerrar si le
doy si me sale del form afiliados y antes de cargar el principal me vuelve a
preguntar si quiero volver a cerrar, y es aqui donde encuentro el problema,
ya que al cerrar afiliados tiene que ir al principal tan solo preguntando al
salir del afiliados, os pongo el codigo para no volveros locos, aunque me
imagino que el problema es en el Closing del principal



'Forma de cerrar Principal



Private Sub frmPrincipal_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

e.Cancel = Not UsuarioQuiereSalir()

End Sub

Private Sub mnuClose_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuClose.Click

Call frmPrincipal_Closing(Me, New
System.ComponentModel.CancelEventArgs)

End Sub

Private Function UsuarioQuiereSalir() As Boolean

Return MsgBox("¿Desea salir?", MsgBoxStyle.YesNo +
MsgBoxStyle.Question, "Salir") = DialogResult.Yes

End Function



'Llamada a Afiliados desde Principal



Private Sub cmdAfiliados_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuAfiliados.Click, cmdAfiliados.Click

Dim oAfiliados As New frmAfiliados

Me.ShowInTaskbar = False

oAfiliados.ShowDialog()

End Sub



'Afiliados



Private Sub frmAfiliados_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

e.Cancel = Not UsuarioQuiereSalir()

End Sub



Private Sub mnuClose_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuClose.Click, cmdClose.Click

Me.Close()

End Sub



Private Function UsuarioQuiereSalir() As Boolean

Return MsgBox("¿Desea salir?", MsgBoxStyle.YesNo +
MsgBoxStyle.Question, "Salir") = DialogResult.Yes
End Function





Gracias

Preguntas similare

Leer las respuestas

#1 Lucas
15/03/2006 - 20:39 | Informe spam
No he podido revisar bien tu código debido a que estoy en mi trabajo y no
dispongo de mucho tiempo, pero ese tipo de problemas por lo general yo los
detecto haciéndole un seguimiento paso paso al programa, porque lo más
probable es que sea un error en tu lógica.

Ponle un breakpoint en el evento donde creas que pueda estar el problema y
revisalo paso a paso.
Respuesta Responder a este mensaje
#2 Guillermo guille
15/03/2006 - 22:12 | Informe spam
Si dos te decimos lo mismo, (aunque sea con más de dos meses de diferencia)
o al menos creo que serás el mismo de este post de mis foros:
http://foros.elguille.info/Mensajes.aspx?ID023
aunque es otro correo, pero como el código es "clavao"...

Pues eso, puede que por ahí vayan los tiros, ¿has probado a usar puntos de
interrupción?

Nos vemos.
Guillermo
Microsoft VB MVP desde 1997
Mentor Asociado de Solid Quality Learning Iberoamericana

Te recuerdo que puedes entrar en mi sitio desde:
http://www.elguille.info/ y http://www.mundoprogramacion.com/
Los foros en: http://foros.elguille.info/

"Yago" escribió en el mensaje
news:
Hola tengo 2 forms llamados principal y afiliados, el problema es que
cuando le doy al boton cerrar del form afiliados me pregunta si quiero
cerrar si le doy si me sale del form afiliados y antes de cargar el
principal me vuelve a preguntar si quiero volver a cerrar, y es aqui donde
encuentro el problema, ya que al cerrar afiliados tiene que ir al
principal tan solo preguntando al salir del afiliados, os pongo el codigo
para no volveros locos, aunque me imagino que el problema es en el Closing
del principal



'Forma de cerrar Principal



Private Sub frmPrincipal_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

e.Cancel = Not UsuarioQuiereSalir()

End Sub

Private Sub mnuClose_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuClose.Click

Call frmPrincipal_Closing(Me, New
System.ComponentModel.CancelEventArgs)

End Sub

Private Function UsuarioQuiereSalir() As Boolean

Return MsgBox("¿Desea salir?", MsgBoxStyle.YesNo +
MsgBoxStyle.Question, "Salir") = DialogResult.Yes

End Function



'Llamada a Afiliados desde Principal



Private Sub cmdAfiliados_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuAfiliados.Click, cmdAfiliados.Click

Dim oAfiliados As New frmAfiliados

Me.ShowInTaskbar = False

oAfiliados.ShowDialog()

End Sub



'Afiliados



Private Sub frmAfiliados_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

e.Cancel = Not UsuarioQuiereSalir()

End Sub



Private Sub mnuClose_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuClose.Click, cmdClose.Click

Me.Close()

End Sub



Private Function UsuarioQuiereSalir() As Boolean

Return MsgBox("¿Desea salir?", MsgBoxStyle.YesNo +
MsgBoxStyle.Question, "Salir") = DialogResult.Yes
End Function





Gracias


Respuesta Responder a este mensaje
#3 Luis Miguel Blanco
16/03/2006 - 09:56 | Informe spam
Hola Yago

He visto esta misma pregunta en otro post anterior del foro, y te he enviado
una respuesta, aunque te la adjunto también aquí por si vieras este antes. De
todas formas, tal y como te han dicho Lucas y Guillermo, revisa con calma y
mucho depurador 8-) el código ya que tiene todo el aspecto de una cuestión de
lógica de la aplicación.

Es extraña esta situación que comentas, la he intentado reproducir pero a mí
me ha funcionado bien, es decir, cuando cierro el formulario de afiliados, me
pregunta, y si le contesto afirmativamente al cierre, realiza dicho cierre
del formulario volviendo el foco al formulario principal, pero sin preguntar
por el cierre del principal.

Revisando tu código, he observado que en el método mnuClose_Click del
formulario principal, llamas directamente a su evento Closing. Las llamadas
directas a métodos manipuladores de evento no son muy recomendables, es mejor
dejar al sistema que las invoque, por lo que en ese caso sería mejor que
llamaras al método Close del formulario principal con:

Me.Close()

Esto realizaría la llamada a Closing respetando el orden adecuado de
llamadas a los diferentes eventos necesarios para realizar el cierre del
formulario.

Puede que esto esté influyendo de alguna forma en el comportamiento de
cierre que mencionas, prueba a realizar el cambio que te comento a ver si ya
funciona correctamente. Te adjunto también el código que yo he escrito en un
proyecto de prueba simulando el problema que comentabas, pero que a mí me ha
funcionado bien. Por cierto, este código está escrito en un proyecto en
Visual Studio 2005.

'/////////////////////////////////////////
Public Class frmPrincipal
Private Sub frmPrincipal_FormClosing(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
e.Cancel = Not Me.UsuarioQuiereSalir()
End Sub

Private Sub mnuClose_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuClose.Click
Me.Close()
End Sub

Private Function UsuarioQuiereSalir() As Boolean
Dim xResultado As DialogResult = MessageBox.Show("¿Salir?", "",
MessageBoxButtons.YesNo)

If xResultado = Windows.Forms.DialogResult.Yes Then
Return True
Else
Return False
End If
End Function

Private Sub mnuAfiliados_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuAfiliados.Click
Dim oFrmAfiliados As frmAfiliados = New frmAfiliados()
Me.ShowInTaskbar = False
oFrmAfiliados.ShowDialog()
End Sub
End Class
'=Public Class frmAfiliados
Private Sub frmAfiliados_FormClosing(ByVal sender As Object, ByVal e As
System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
e.Cancel = Not Me.UsuarioQuiereSalir()
End Sub

Private Sub mnuClose_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuClose.Click
Me.Close()
End Sub

Private Function UsuarioQuiereSalir() As Boolean
Dim xResultado As DialogResult
xResultado = MessageBox.Show("¿Salir afiliados?", "",
MessageBoxButtons.YesNo)

If xResultado = Windows.Forms.DialogResult.Yes Then
Return True
Else
Return False
End If
End Function
End Class
'/////////////////////////////////////////

Espero que consigas solucionarlo.
Un saludo
Luis Miguel Blanco
http://www.dotnetmania.com


"Yago" wrote:

Hola tengo 2 forms llamados principal y afiliados, el problema es que cuando
le doy al boton cerrar del form afiliados me pregunta si quiero cerrar si le
doy si me sale del form afiliados y antes de cargar el principal me vuelve a
preguntar si quiero volver a cerrar, y es aqui donde encuentro el problema,
ya que al cerrar afiliados tiene que ir al principal tan solo preguntando al
salir del afiliados, os pongo el codigo para no volveros locos, aunque me
imagino que el problema es en el Closing del principal



'Forma de cerrar Principal



Private Sub frmPrincipal_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

e.Cancel = Not UsuarioQuiereSalir()

End Sub

Private Sub mnuClose_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuClose.Click

Call frmPrincipal_Closing(Me, New
System.ComponentModel.CancelEventArgs)

End Sub

Private Function UsuarioQuiereSalir() As Boolean

Return MsgBox("¿Desea salir?", MsgBoxStyle.YesNo +
MsgBoxStyle.Question, "Salir") = DialogResult.Yes

End Function



'Llamada a Afiliados desde Principal



Private Sub cmdAfiliados_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuAfiliados.Click, cmdAfiliados.Click

Dim oAfiliados As New frmAfiliados

Me.ShowInTaskbar = False

oAfiliados.ShowDialog()

End Sub



'Afiliados



Private Sub frmAfiliados_Closing(ByVal sender As Object, ByVal e As
System.ComponentModel.CancelEventArgs) Handles MyBase.Closing

e.Cancel = Not UsuarioQuiereSalir()

End Sub



Private Sub mnuClose_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles mnuClose.Click, cmdClose.Click

Me.Close()

End Sub



Private Function UsuarioQuiereSalir() As Boolean

Return MsgBox("¿Desea salir?", MsgBoxStyle.YesNo +
MsgBoxStyle.Question, "Salir") = DialogResult.Yes
End Function





Gracias



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida