Condicionar Textbox a un rango determinado ??

Iniciado por luis456, 11 Marzo 2016, 14:10 PM

0 Miembros y 2 Visitantes están viendo este tema.

luis456

Hola jejej a todos vuelvo con una chorrada

tengo varios TextBox y quiero que a partir del sexto no  me acepte números mayores a 45 y que cuando el usuario ponga un numero mayor a 45 no deje continuar el programa hasta poner un numero menor a 45 estoy con este codigo simplón pero deja que siga el programa auqnue le avise al usuario

Código (vbnet) [Seleccionar]
Private Sub TextBox6_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles TextBox6.Validating
        If (Int(TextBox6.Text) < 0 Or Int(TextBox6.Text) > 45) Then

            MsgBox("Numero mayor que 45 en casilla 6 introduzca numero correcto")

        End If

    End Sub 



saludos
Luis


Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

Hacer eso es reinventar la rueda, te sugiero usar un NumericUpDown, le pones valor máximo:45 valor mínimo:0 y ya lo tienes todo hecho.

De todas formas si sigues prefiriendo usar un TextBox dímelo y te explico como (con un ErrorProvider sería lo ideal).

Saludos!








luis456

Cita de: Eleкtro en 11 Marzo 2016, 14:48 PM
Hacer eso es reinventar la rueda, te sugiero usar un NumericUpDown, le pones valor máximo:45 valor mínimo:0 y ya lo tienes todo hecho.

De todas formas si sigues prefiriendo usar un TextBox dímelo y te explico como (con un ErrorProvider sería lo ideal).

Saludos!

Hola elektro bueno cambiar por  numeric me supondria hacer un monton de cambios en el codigo yo pensaba en algo mas facil , ya te aviso que hare, voy a mirar primero lo del error ese que pusiste

gracias

Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

Cita de: luis456 en 11 Marzo 2016, 15:34 PM
yo pensaba en algo mas facil

Estoy casi seguro que la pregunta que has formulado ya la resolviste hace tiempo...
http://foro.elhacker.net/net/ayuda_como_hacer_para_validar_una_text_box_para_q_admita_solo_numeros-t429160.0.html;msg1994277#msg1994277
...no exactamente en ese post, pero no encuentro donde te mostré un ejemplo.

En fin, lo más sencillo es que uses un NumericUpDown, o heredar la Class de ese control para hacerlo más similar a un TextBox:

Código (vbnet) [Seleccionar]
Public Class NumericTextBox : Inherits NumericUpDown

   Public Sub New()
       MyBase.New()
       MyBase.Controls(0).Visible = False
   End Sub

   Protected Overrides Sub OnTextBoxResize(ByVal source As Object, ByVal e As EventArgs)
       MyBase.Controls(0).Size = New Size(0, MyBase.ClientSize.Height)
       MyBase.Controls(1).Size = New Size(MyBase.ClientSize.Width, MyBase.ClientSize.Height)
   End Sub

End Class

(no está pulido, es un ejemplo breve)




Con un TextBox corriente puedes hacerlo de la siguiente manera:
Código (vbnet) [Seleccionar]
   Private Sub TextBox1_Keypress(ByVal sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress

       e.Handled = Not Char.IsNumber(e.KeyChar)

   End Sub

   Private Sub TextBox1_TextChanged(ByVal sender As Object, e As EventArgs) Handles TextBox1.TextChanged

       Dim ctrl As TextBox = DirectCast(sender, TextBox)

       If CInt(ctrl.Text) > 45 Then
           ctrl.Text = "45"
       End If

   End Sub












luis456

Hola Elektro

Me decante por la segunda propuesta

Con un TextBox corriente puedes hacerlo de la siguiente manera:
Código (vbnet) [Seleccionar]
   Private Sub TextBox1_Keypress(ByVal sender As Object, e As KeyPressEventArgs) Handles TextBox1.KeyPress

       e.Handled = Not Char.IsNumber(e.KeyChar)

   End Sub

   Private Sub TextBox1_TextChanged(ByVal sender As Object, e As EventArgs) Handles TextBox1.TextChanged

       Dim ctrl As TextBox = DirectCast(sender, TextBox)

       If CInt(ctrl.Text) > 45 Then
           ctrl.Text = "45"
       End If

   End Sub


[/quote]


Pero claro siempre hay un pero jejje

error
La conversión de la cadena "" en el tipo 'Integer' no es válida.

Bien te enseño como tengo esto montado


Código (vbnet) [Seleccionar]
Private Sub TextBox6_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox6.KeyPress, TextBox5.KeyPress, TextBox4.KeyPress, TextBox3.KeyPress, TextBox2.KeyPress, TextBox1.KeyPress
        Button1.Enabled = ((TextBox1.TextLength > 0) And (TextBox2.TextLength > 0) And (TextBox3.TextLength > 0) And (TextBox4.TextLength > 0) And (TextBox5.TextLength > 0) And (TextBox6.TextLength > 0))
        'And (TextBox7.TextLength > 0))
       

        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If


    End Sub



puse tu código

de esta forma y si retrocede a 45 si pongo un numero mayor pero me salta el error


Código (vbnet) [Seleccionar]
  Private Sub TextBox6_KeyPress(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox6.KeyPress, TextBox5.KeyPress, TextBox4.KeyPress, TextBox3.KeyPress, TextBox2.KeyPress, TextBox1.KeyPress
        Button1.Enabled = ((TextBox1.TextLength > 0) And (TextBox2.TextLength > 0) And (TextBox3.TextLength > 0) And (TextBox4.TextLength > 0) And (TextBox5.TextLength > 0) And (TextBox6.TextLength > 0))
        'And (TextBox7.TextLength > 0))
        e.Handled = Not Char.IsNumber(e.KeyChar)

        solonumeros(e)
        If e.KeyChar = ChrW(Keys.Enter) Then
            e.Handled = True
            SendKeys.Send("{TAB}")

        End If

    End Sub

    Private Sub TextBox6_TextChanged(ByVal sender As Object, ByVal e As EventArgs) Handles TextBox6.TextChanged

        Dim ctrl As TextBox = DirectCast(sender, TextBox)

        If CInt(ctrl.Text) > 45 Then
            ctrl.Text = "45"
        End If

    End Sub



Luis




Que tu sabiduria no sea motivo de Humillacion para los demas

Eleкtro

Cita de: luis456 en 11 Marzo 2016, 20:14 PM
error
La conversión de la cadena "" en el tipo 'Integer' no es válida.

Lo puedes solucionar evaluando si el string está vacío antes de usar la función CInt().

Código (vbnet) [Seleccionar]
If String.IsNullOrEmpty(texto) then...

  If (CInt(texto) > 45) then...


O también puedes resolverlo utilizando la función Integer.TryParse() en lugar de CInt().

Saludos








Filetito

Hola como puedo hace para que un textBox me no me acepte numeros menores a 2020

tengo este pero este solo me funciona cuando es mayor a 2020 y necesito todo lo conttario

Private Sub txtnumero_TextChanged(sender As Object, e As EventArgs) Handles txtnumero.TextChanged
        If Val(txtnumero.Text) > 2020 Then
            MsgBox("Valor inválido", MsgBoxStyle.Information, "Información")
            txtnumero.Focus()
        End If
    End Sub
si me podrian ayudar porfavor :(

Serapis

Tu pregunta es demasiado elemental (y la redacción contradictoria).
Simplemente cambia el operador de comparación de un 'mayor que' a un 'menor que' o quizás a un 'menor o igual que' (según sea el caso práctico).

Es tan elemental, que no queda más remedio que derivarte a la lectura. Cabe preguntarse si entiendes el código que has puesto...