https://foro.gambas-es.org/viewtopic.php?f=1&t=5406
-----------------------------------
elitedigital2005
Miercoles, 27 Abril 2016, 04:56

Como Hago Para Que Un Textbox No Admita Pegar Texto?
-----------------------------------
Tengo un Textbox el cual solo quiero que admita números, ya he hecho una función para esto y con el teclado solo puedo introducir números. Pero si copio algo en el clipboard de algún otro lado, le Textbox permite que lo copie dentro de el sin importar el tipo de texto que sea(símbolos, números, letras).

Quiero saber si hay alguna forma para evitar poder pegar texto en el Textbox.


-----------------------------------
shordi
Miercoles, 27 Abril 2016, 08:14

Re: Como Hago Para Que Un Textbox No Admita Pegar Texto?
-----------------------------------
Supongo que con el evento change. Haz una función que suprima las letras... algo así:
[code linenumbers=false syntax=gambas]
public function sololetras(texto as string) as string

dim aletras as string[]
dim letra as string

aletras=["a,"b","c",...etc]
for each letra in aletras
texto=replace(texto,letra,"")
next

return texto[/code]

O quizá más rápido al revés, elimina todo lo que no sean números

[code linenumbers=false syntax=gambas]
public function sololetras(texto as string) as string

dim Numeros,limpio,letra as string
dim n as integer
numeros="1234567890"

for n=0 to len(texto)-1
 letra=mid(texto,n,1)
 if instr(numeros,letra)>0 then limpio &=letra
next

return limpio[/code]

Los he escrito aquí a vuelapluma, o sea que no copies y pegues sin más que lo mismo tiene errores, pero te haces una idea


-----------------------------------
vuott
Miercoles, 27 Abril 2016, 10:33

Re: Como Hago Para Que Un Textbox No Admita Pegar Texto?
-----------------------------------
[quote user="elitedigital2005" post="31977"] para evitar poder pegar texto en el Textbox.[/quote]
Cuando tu dices "[i][color=#7F0000]texto[/color][/i]", estás hablando de solas letras o de cualquier carácter?


-----------------------------------
vicr
Miercoles, 27 Abril 2016, 11:00

Re: Como Hago Para Que Un Textbox No Admita Pegar Texto?
-----------------------------------
Shordi...¿y porqué no dijiste:

"Para números usa un ValueBox, que para eso son... y no un TextBox"

?

Siempre nos recuerdas ese control...  ;-)


-----------------------------------
shordi
Miercoles, 27 Abril 2016, 11:21

Re: Como Hago Para Que Un Textbox No Admita Pegar Texto?
-----------------------------------
[quote user="vicr" post="31989"]Shordi...¿y porqué no dijiste:

"Para números usa un ValueBox, que para eso son... y no un TextBox"

?

Siempre nos recuerdas ese control...  ;-)[/quote]

Pues la verdad es que lo he dicho... y lo he quitado al momento porque no recordaba nunca haber copiado y pegado letras en un valuebox y no sabía si se podía hacer.  He hecho una prueba u sí se puede. Parece ser que valuebox depura los métodos de teclado, pero no el portapapeles. No he seguido con la prueba, si pulsas enter no sé lo que hace el valuebox, pero de lo que se trataba era de impedir el pegado. Así que le he escrito esas funcioncetas para el evento change y espero que funcionen. Si alguno lo prueba, que lo reporte aquí.


-----------------------------------
vuott
Miercoles, 27 Abril 2016, 12:10

Re: Como Hago Para Que Un Textbox No Admita Pegar Texto?
-----------------------------------
[quote user="vicr" post="31989"]Shordi...¿y porqué no dijiste:

"Para números usa un ValueBox, que para eso son... y no un TextBox"[/quote]
Copiando un cualquier texto y pegandolo en un [i]ValueBox[/i], veo que este objecto acepta letras, numeros y otros caracteres. Pulsando "[i]Enter[/i]" el texto no es depurado.


Por lo que se refiere al aceptar solo numeros, por curiosidad muestro este código,  acogiendo la sugerencia de [i]shordi[/i] del evento [i]_Change()[/i]:
[code linenumbers=false syntax=gambas]Public Sub TextBox1_Change()

  Dim bb As Byte[]
  Dim i As Integer

  If Not IsDigit(TextBox1.Text) Then
    bb = Byte[].FromString(TextBox1.Text)
    Do
      If Not IsDigit(Chr(bb[i])) Then
        bb.Remove(i, 1)
        Dec i
      Endif
      Inc i
    Loop Until i = bb.Count
    TextBox1.Text = bb.ToString(0, bb.count)
  Endif
  
End[/code]

o con funciones String:
[code linenumbers=false syntax=gambas]Public Sub TextBox1_Change()

  Dim i As Integer

   For i = 1 To String.Len(TextBox1.Text)
     If Not IsDigit(Mid(TextBox1.Text, i, 1)) Then TextBox1.Text = Replace(TextBox1.Text, Mid(TextBox1.Text, i, 1), Null)
   Next

End[/code]


-----------------------------------
vicr
Miercoles, 27 Abril 2016, 12:59

Re: Como Hago Para Que Un Textbox No Admita Pegar Texto?
-----------------------------------
Curioso lo del ValueBox.

Y si nos ponemos maldadosos y limpiamos el portapapeles cuando esté activo el formulario.

Public sub Form_Active ()
 Clipboard.clear ()

End

Creo que así se escribe, ando haciendo trámites...


-----------------------------------
shordi
Miercoles, 27 Abril 2016, 13:04

Re: Como Hago Para Que Un Textbox No Admita Pegar Texto?
-----------------------------------
[quote user="vicr" post="31994"]Curioso lo del ValueBox.

Y si nos ponemos maldadosos y limpiamos el portapapeles cuando esté activo el formulario.

Public Form_Active ()
 Clipboard.clear ()

End

Creo que así se escribe, ando haciendo trámites...[/quote]
Eso es muy drástico, puedes querer copiar y pegar en otros campos de texto del mismo formulario...


