none
MsgBox Personalizado no me responde correctamente... RRS feed

  • Pregunta

  • Buenas tardes compañeros del foro de ante manos muchas gracias por revisar mi caso siguiente:

    Estoy realizando un proyecto personalizado, mas sin embargo he notado que los MsgBox de windows me arruinan la apariencia  de mi aplicación, puesto que son muy aburridos, asi que estoy realizando un MsgBox Personalizado pero no encuentro la manera de detectar que botón se presiono si el botón "Si" O el boton "No", si hay alguien que me puede ayudar se lo agradeseria, les dejo el código que tengo hasta ahora:

    En el Form: MsgBoxPersonalizado tengo lo siguiente:

    Public Class MsgBoxPersonalizado
        Dim Button_1 As String
        Dim newMessageBox = New Form
        Public Function ShowBox(txtMessage As String, txtTitulo As String)
            newMessageBox = New MsgBoxPersonalizado
            newMessageBox.lblTitulo.Text = txtTitulo
            newMessageBox.lblmensaje.Text = txtMessage
            newMessageBox.ShowDialog()
            Return Button_1
        End Function
        Private Sub btnCe_Click(sender As Object, e As EventArgs) Handles btnCe.Click
            Button_1 = "1"
            newMessageBox.Dispose()
        End Sub
        Private Sub btnna_Click(sender As Object, e As EventArgs) Handles btnna.Click
            Button_1 = "2"
            newMessageBox.Dispose()
        End Sub
    End Class

    En otro form de donde mando a llamar a la función llamado : FormProbarMsgBox tengo lo siguiente:

    Public Class FormProbarMsgBox
        Private Sub ITalk_Button_21_Click(sender As Object, e As EventArgs) Handles ITalk_Button_21.Click
            Dim resultado = MsgBoxPersonalizado.ShowBox(txtMessage:="Esta seguro que desea guardar los datos", txtTitulo:="Econtrol")
            If resultado.Equals("1") Then
                MessageBox.Show("Presiono Boton Si")
            End If
            If resultado.Equals("2") Then
                MessageBox.Show("presiono Boton No")
            End If
        End Sub
    End Class

    Aqui les dejo una imagen del resultado final gracias.

    miércoles, 14 de noviembre de 2018 19:24

Todas las respuestas

  • Fíjate en el problema que tienes: Estás instanciando dos copias del MessabeBoxPersonalizado: Una es la que usas cuando realizas la llamada al método ShowBox. Esta instancia contiene una variable Button_1 que es la que retornas al volver del método. Esta variable Button_1 siempre vale Nothing, nunca se le asigna ningún valor. Y la otra instancia es la que construyes dentro de la función llamando a New MsgBoxPersonalizado. Esta segunda instancia contiene una segunda copia de la variable Button_1, y esta segunda copia es la que cambia de valor cuando se ejecutan los clicks de los botones que existen en esta segunda instancia. El valor así cargado en esta segunda copia de Button_1 nunca se devuelve a ningún sitio.

    Solución sencilla pero chapucera: En lugar de "return Button_1" pon "return newMessageBox.Button_1" (y cambia a Public la declaración de Button_1 para que no dé error).

    Solución elegante: Controla tus instancias y no las crees "a lo loco" sin darte cuenta de cuáles son las instancias que usas. El método ShowBox puede ser "shared", lo que evita la primera instancia, y dentro creas la segunda instancia y devuelves el valor de ésta.

    miércoles, 14 de noviembre de 2018 20:09
  • Solución sencilla pero chapucera: En lugar de "return Button_1" pon "return newMessageBox.Button_1" (y cambia a Public la declaración de Button_1 para que no dé error).

    No me funciono...y el detalle es que estoy espesando en esto y no domino muy bien el tema.


    miércoles, 14 de noviembre de 2018 20:42
  • No me funciono...

    Debería de funcionar. De lo contrario, se nos está escapando algo. Cuando esto pasa, hay que utilizar el debugger. Se pone un punto de ruptura a la entrada del código conflictivo, y se sigue la ejecución línea por línea examinando las variables en cada paso hasta detectar cuál es la que no adquiere el valor que esperábamos en el momento en que lo esperábamos.
    • Propuesto como respuesta Pablo Rubio miércoles, 14 de noviembre de 2018 22:20
    miércoles, 14 de noviembre de 2018 21:31
  • Hola a todos, en base al tema con ayuda del compañero Genesis Vargas Jimenez quien publico en su pagina(http://www.genesisvargasj.com/blog/como-crear-tu-propio-messagebox-personalizado-en-visual-basic-net) un ejemplo de como hacer un MessageBox Personalizado he logrado obtener un resultado muy bueno a mi planteamiento mas sin embargo yo quisiera aprender y pues no le entiendo al código así que desearía si alguien de ustedes me lo puede explicar para poder asimilarlo y así ir aprendiendo, puesto que soy nuevo en esto...Muchas gracias de antemanos.

    el codigo del MessageBox es :

    Public Class FormMsgBox
        Shared Idbutton As Integer
        Shared nuevoMessageBox As FormMsgBox
    
        Public Overloads Function Show(ByVal texto As String) As Integer
            nuevoMessageBox = New FormMsgBox
            nuevoMessageBox.lblmensaje.Text = texto
            nuevoMessageBox.ShowDialog()
            Return Idbutton
    
        End Function
        Public Overloads Function Show(texto As String, titulo As String, boton As Integer) As Integer
            nuevoMessageBox = New FormMsgBox
            nuevoMessageBox.lblmensaje.Text = texto
            nuevoMessageBox.lbltitulo.Text = titulo
            If boton = 1 Then
                nuevoMessageBox.btnok.BackColor = Color.FromArgb(255, 66, 88)
                nuevoMessageBox.btnno.Visible = False
            ElseIf boton = 2 Then
                nuevoMessageBox.btnok.Visible = False
            End If
            nuevoMessageBox.ShowDialog()
            Return Idbutton
    
        End Function
        Public Overloads Function Show(texto As String, titulo As String) As Integer
            nuevoMessageBox = New FormMsgBox()
            nuevoMessageBox.lblmensaje.Text = texto
            nuevoMessageBox.lbltitulo.Text = titulo
            nuevoMessageBox.ShowDialog()
            Return Idbutton
        End Function
    
        Public Overloads Function Show(texto As String, boton As Integer, titulo As String) As Integer
            nuevoMessageBox = New FormMsgBox()
            nuevoMessageBox.lblmensaje.Text = texto
            nuevoMessageBox.lbltitulo.Text = titulo
            If boton = 1 Then
                nuevoMessageBox.btnok.BackColor = Color.FromArgb(255, 66, 88)
                nuevoMessageBox.btnno.Visible = False
            ElseIf boton = 2 Then
                nuevoMessageBox.btnok.Visible = False
            End If
    
            nuevoMessageBox.ShowDialog()
            Return Idbutton
        End Function
    
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles btnok.Click
            Idbutton = 1
            nuevoMessageBox.Dispose()
        End Sub
    
        Private Sub Button2_Click(sender As Object, e As EventArgs) Handles btnno.Click
            Idbutton = 2
            nuevoMessageBox.Dispose()
    
        End Sub
    End Class

    Llamada a la funcion:

    If FormMsgBox.Show("Hola Mundo", "Econtrol") = 1 Then
                MessageBox.Show("Usted dio clip en el boton Si", "Econtrol")
            Else
                MessageBox.Show("Usted dio clip en el boton No", "Econtrol")
    
            End If

    Provecho.

    jueves, 15 de noviembre de 2018 15:24