none
Como puedo capturar en un DateTimePicker dos meses diferentes para cargarlos en dos variables RRS feed

  • Pregunta

  • Estoy intentando capturar con dos DataTimePicker un mes de cada uno de ellos, pero como estoy usando el valuechanged siempre me captura el mismo mes. Aqui pongo el código

        Private Sub DateTimePicker1_VisibleChanged(sender As Object, e As EventArgs) Handles DateTimePicker1.VisibleChanged
            vmes = Convert.ToString(DateTimePicker1.Value.Month)
            vaño = Convert.ToString(DateTimePicker1.Value.Year)
            txtAño.Text = CStr(vaño)
            Label3.Text = "Balance de " & Convert.ToString(DateTime.Now.ToString("MMMM")) & " año " & CStr(vaño)
            DateTimePicker1.Visible = False
            DateTimePicker2.Visible = True
        End Sub

        Private Sub DateTimePicker2_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker2.ValueChanged
            vmes1 = Convert.ToString(DateTimePicker2.Value.Month)
            vaño1 = Convert.ToString(DateTimePicker2.Value.Year)
            If CStr(vaño) = CStr(vaño1) Then
                DateTimePicker1.Visible = True
                DateTimePicker2.Visible = False
                cargaDatos()
            Else
                MsgBox("No se puede tomar información de años diferentes")
            End If
        End Sub

    Imagino que se tiene que poder hacerlo con solo un DataTmePicker pero soy incapaz de dar con la forma.

    Gracias y un saludo

    domingo, 3 de septiembre de 2017 11:28

Respuestas

  • ¿En qué te basas para determinar que "capturas" el mismo mes?, muy a pesar de que discrepo con el código adjunto yo creo que sí recuperas -en las variables correspondientes- el valor de los meses seleccionados, sea que se trate del mismo mes o de meses distintos. Por cierto, no te basas en la siguiente instrucción que has escrito para determinar lo que mencionas, ¿verdad?

    Label3.Text = "Balance de " & DateTime.Now.ToString("MMMM") & " año " & CStr(vaño)

    Es evidente que el mes que se muestra es el actual, no se trata del valor de mes seleccionado en alguno de los controles.

    La instrucción debería ser:

    Label3.Text = $"Balance {dtp1.Value.ToString("MMMM-yyyy")} - {dtp2.Value.ToString("MMMM-yyyy")}"


    Te recomiendo evitar las variables con ámbito de clase, no son necesarias.

    Por otro lado, ¿cuál es el sentido de mostrar/ocultar los controles?, te recomiendo que no lo hagas, no le veo algún tipo de valor y muy por el contrario resulta contraproducente, ¿qué sucede si el usuario desea modificar el rango del periodo?. Invoca al procedimiento pasando -como argumentos- los valores capturados, no los tomes de las variables globales, para tal caso quizá te convenga mostrar tres desplegables: los dos primeros conteniendo únicamente los meses y el tercero los años.



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    domingo, 3 de septiembre de 2017 19:07

Todas las respuestas

  • Si el objetivo es una busqueda entre dos fechas, es correcto que coloques dos DataTimePicker hasta por una cuestión de entendimiento del usuario final. Lo que no me quedó claro es el error que te produce

    Saludos

    domingo, 3 de septiembre de 2017 13:41
  • Hola

    Estoy intentando capturar con dos DataTimePicker un mes de cada uno de ellos

    Para poder capturar el mes de los DataTimePiker cada vez que cambies de mes tienes que usar el evento ValueChanged

    Puedes declarar dos variables a nivel de formulario para poder usarlas desde donde la requieras

    Public Class Form1
        Dim sMes1 As String
        Dim sMes2 As String
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        End Sub
        Private Sub DateTimePicker1_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker1.ValueChanged
            sMes1 = DateTimePicker1.Value.ToString("MM")
        End Sub
        Private Sub DateTimePicker2_ValueChanged(sender As Object, e As EventArgs) Handles DateTimePicker2.ValueChanged
            sMes2 = DateTimePicker2.Value.ToString("MM")
        End Sub
    End Class
    
    
    

    Saludos


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú




    • Editado Pedro Ávila domingo, 3 de septiembre de 2017 14:19
    domingo, 3 de septiembre de 2017 14:16
  • ¿En qué te basas para determinar que "capturas" el mismo mes?, muy a pesar de que discrepo con el código adjunto yo creo que sí recuperas -en las variables correspondientes- el valor de los meses seleccionados, sea que se trate del mismo mes o de meses distintos. Por cierto, no te basas en la siguiente instrucción que has escrito para determinar lo que mencionas, ¿verdad?

    Label3.Text = "Balance de " & DateTime.Now.ToString("MMMM") & " año " & CStr(vaño)

    Es evidente que el mes que se muestra es el actual, no se trata del valor de mes seleccionado en alguno de los controles.

    La instrucción debería ser:

    Label3.Text = $"Balance {dtp1.Value.ToString("MMMM-yyyy")} - {dtp2.Value.ToString("MMMM-yyyy")}"


    Te recomiendo evitar las variables con ámbito de clase, no son necesarias.

    Por otro lado, ¿cuál es el sentido de mostrar/ocultar los controles?, te recomiendo que no lo hagas, no le veo algún tipo de valor y muy por el contrario resulta contraproducente, ¿qué sucede si el usuario desea modificar el rango del periodo?. Invoca al procedimiento pasando -como argumentos- los valores capturados, no los tomes de las variables globales, para tal caso quizá te convenga mostrar tres desplegables: los dos primeros conteniendo únicamente los meses y el tercero los años.



    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    domingo, 3 de septiembre de 2017 19:07