none
Mensaje tipo Confirm en SIlverlight RRS feed

  • Pregunta

  • Hola grupo, estoy creando un usercontrol que hereda de ChildWindow, cuando llamo a la ventana de confirmacion (SI/NO), lo que hago es preguntar si devuelve true o false, pero el codigo sigue corriendo lo detallo en el ejemplo

    Msg.Show()
    'aca tendría que parar y una vez que cierro la ventana modal sigue
    If Msg.DialogResult Then
      'Accion
    End If
    Como lo hacíamos en cualquier aplicación de escritorio.. se puede?

    viernes, 30 de abril de 2010 12:20

Respuestas

  • Hola David, el espacio de nombres es System.Windows.Controls, es Silverlight 4 el que estoy usando, pero ya venia a partir del 2 si mal no me equivoco.

    La funcion es Show, pero no detiene la ejecucion, por ahora lo solucione controlando el evento closed, por ejemplo:

    Dim Msg As New ChildWindow
    Msg.Show()
    AddHandler Msg.Closed, AddressOf MsgElimCursoClick
    saludos

    • Marcado como respuesta samArg martes, 1 de junio de 2010 14:42
    lunes, 3 de mayo de 2010 12:00
  • ¡Buenos días!

    Llevo un mes con un mosqueo con este tema y por fin vislumbro la salida ;-). No me extraña que David estuviera detrás de ella. Me extrañaba mucho que un control que en todos los lados decían que era modal no se comportara como tal. Hasta estaba probando controles que encontré por ahí. Y me preguntaba si era porque no rellené la propiedad DialogResult pero no, es cosa de la API. David, ¿dónde puedo leer esa información que encontraste?

    Hasta el momento lo resolvía con delegados hacia atras. Es decir. Sabía que la ejecución del código se me descontrolaba: seguía corriendo a pesar de levantar el formulario ChildWindow después. Entonces, un delegado cuando se pulsaba el botón aceptar ejecutaba el código en el formulario (ChildWindow) que quería: volvía a controlar la ejecución del código. El problema es que todo debe de instanciarse como Shared. Lo que en C# es static. Un follón impresionante y una chapuza de código resultante ;-)

    La solución de samArg también es un delegado pero hacia adelante, más limpio. Lo que no entiendo es: AddressOf MsgElimCursoClick. El address of esta apuntando a una función pero, ¿esta función la creo él?

    Bueno, que tengas una buena semana. Un saludo.

    ________________________________________________________________________________________

    Ya di respuesta a mis preguntas ;-)

    1. http://msdn.microsoft.com/es-es/library/system.windows.controls.childwindow%28VS.95%29.aspx

    2. Como pone en el ejemplo de msdn MsgElimCursoClick es una función que debe de estar en la llamada del ChildWindow. Es más limpio pero sigo pensando que complica la codificación

    • Editado CorsarioVasco jueves, 27 de mayo de 2010 8:43 Encontre la solución
    • Propuesto como respuesta David_González jueves, 27 de mayo de 2010 12:10
    • Marcado como respuesta samArg martes, 1 de junio de 2010 14:43
    jueves, 27 de mayo de 2010 7:57

Todas las respuestas

  • Hola samArg.

    ¿El user control es de WPF?, ¿en que nombre de espacio esta ChildWindow que no lo conozco?.

    De todas formas, para mostrarlo de la forma que quieres debe existir alguna funcion que se llame ShowModal() de forma que sea modtrado como modal.


    Saludos
    David González
    lunes, 3 de mayo de 2010 7:35
  • Hola David, el espacio de nombres es System.Windows.Controls, es Silverlight 4 el que estoy usando, pero ya venia a partir del 2 si mal no me equivoco.

    La funcion es Show, pero no detiene la ejecucion, por ahora lo solucione controlando el evento closed, por ejemplo:

    Dim Msg As New ChildWindow
    Msg.Show()
    AddHandler Msg.Closed, AddressOf MsgElimCursoClick
    saludos

    • Marcado como respuesta samArg martes, 1 de junio de 2010 14:42
    lunes, 3 de mayo de 2010 12:00
  • Hola samArg.

    Ok, creia que era de WPF (no lei bien el titulo, sorry).

    Si, la opcion es la que indicas, en la api dice que la ejecucion continua y se debe usar el evento 'closed' para capturar el resultado de la ventana. De modo que esa es la opcion que da microsoft.

     


    Saludos
    David González
    • Propuesto como respuesta David_González jueves, 27 de mayo de 2010 12:10
    lunes, 3 de mayo de 2010 13:23
  • hola samArg

    el mensaje de confirmacion yo lo manejo asi, no se si es lo que necesitas pero espero te sea de ayuda:

    if (MessageBox.Show("Desea Guardar el Proyecto?", "Cerrar sin Guardar?", MessageBoxButton.YesNo) == MessageBoxResult.Yes)
          {
            MessageBox.Show("guardado");
          }
          else
          {
            this.Close();
          }

    este es un ejemplo de confirmacion para cerrar el programa con confirmacion

    saluudos

    • Propuesto como respuesta David_González jueves, 27 de mayo de 2010 12:10
    jueves, 6 de mayo de 2010 1:37
  • ¡Buenos días!

    Llevo un mes con un mosqueo con este tema y por fin vislumbro la salida ;-). No me extraña que David estuviera detrás de ella. Me extrañaba mucho que un control que en todos los lados decían que era modal no se comportara como tal. Hasta estaba probando controles que encontré por ahí. Y me preguntaba si era porque no rellené la propiedad DialogResult pero no, es cosa de la API. David, ¿dónde puedo leer esa información que encontraste?

    Hasta el momento lo resolvía con delegados hacia atras. Es decir. Sabía que la ejecución del código se me descontrolaba: seguía corriendo a pesar de levantar el formulario ChildWindow después. Entonces, un delegado cuando se pulsaba el botón aceptar ejecutaba el código en el formulario (ChildWindow) que quería: volvía a controlar la ejecución del código. El problema es que todo debe de instanciarse como Shared. Lo que en C# es static. Un follón impresionante y una chapuza de código resultante ;-)

    La solución de samArg también es un delegado pero hacia adelante, más limpio. Lo que no entiendo es: AddressOf MsgElimCursoClick. El address of esta apuntando a una función pero, ¿esta función la creo él?

    Bueno, que tengas una buena semana. Un saludo.

    ________________________________________________________________________________________

    Ya di respuesta a mis preguntas ;-)

    1. http://msdn.microsoft.com/es-es/library/system.windows.controls.childwindow%28VS.95%29.aspx

    2. Como pone en el ejemplo de msdn MsgElimCursoClick es una función que debe de estar en la llamada del ChildWindow. Es más limpio pero sigo pensando que complica la codificación

    • Editado CorsarioVasco jueves, 27 de mayo de 2010 8:43 Encontre la solución
    • Propuesto como respuesta David_González jueves, 27 de mayo de 2010 12:10
    • Marcado como respuesta samArg martes, 1 de junio de 2010 14:43
    jueves, 27 de mayo de 2010 7:57
  • Hola Corsario.

    Exacto, el link que has puesto es el que comentaba. Y en el explica tambien el uso de los eventos para que cuando se cierre la ventana, obtener el resultado.

    Bueno, a mi, tampoco me acaba mucho este control para una ventana modal, puede llegar a complicar el codigo en ciertas circunstancias.


    Saludos
    David González
    jueves, 27 de mayo de 2010 12:09