Ir para conteúdo
Fórum Script Brasil
  • 0

Campo Text


mestre fyoda

Pergunta

21 respostass a esta questão

Posts Recomendados

  • 0

Achou a propriedade SelStart? unsure.gif

teria como eu controlar o numero de casas depois da virgula , por exemplo tenho um campo textbox e nele vai ser digitado um valor em reais , e depois da virgula so pode ter 2 numeros , tem como só poder digitar dois numeros depois da virgula ?

Sim, você pode colocar isso aqui no evento KeyPress:

    If KeyAscii <> 8 Then
        texto = Text1.Text
        cursorpos = Text1.SelStart
        
        posição = InStr(1, texto, ",")
        If cursorpos >= posição Then
            If posição > 0 Then
                depois = Right(texto, Len(texto) - posição)
                If Len(depois) > 1 Then
                    KeyAscii = 0
                End If
            End If
        End If
    End If

Esse código aí verifica se já existem dois caracteres depois da vírgula e se o caboclo está digitando depois dela; caso positivo, ele bloqueia a tecla. Sacou? wink.gif

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

 

If KeyAscii <> 8 Then

       cursorpos = Text1.SelStart

      

       posição = InStr(1, texto, ",")

       If cursorpos >= posição Then

           If posição > 0 Then

               depois = Right(texto, Len(texto) - posição)

               If Len(depois) > 1 Then

                   KeyAscii = 0

Grato pela atenção

Link para o comentário
Compartilhar em outros sites

  • 0

Form_Load? Você tem que colocar esse código no evento KeyPress da caixa de texto (eu disse isso no outro post). E também eu já expliquei, em termos gerais, o que esse código faz. Se você quiser tirar alguma dúvida sobre o que uma determinada coisa faz, pergunte especificando-a.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

eu fiz uma função assim no Modal

Sub Virgula()

Cadastrar_Produto.preco_compra.SelStart = 2

Cadastrar_Produto.preco_venda.SelStart = 2

'Mudar_Preco.preco_compra.SelStart = 2

'Mudar_Preco.preco_venda.SelStart = 2

If KeyAscii <> 8 Then

       preco_c = Cadastrar_Produto.preco_compra.Text

       cursorpos = Cadastrar_Produto.preco_compra.SelStart

       preco_v = Cadastrar_Produto.preco_venda.Text

       cursorpos2 = Cadastrar_Produto.preco_venda.SelStart

      

       posição = InStr(1, preco_compra, ",")

       posição2 = InStr(1, preco_venda, ",")

       If cursorpos >= posição Then

           If posição > 0 Then

               depois = Right(preco_compra, Len(preco_compra) - posição)

               If Len(depois) > 1 Then

                   KeyAscii = 0

               End If

           End If

       End If

       If cursorpos2 >= posição2 Then

           If posição2 > 0 Then

               depois2 = Right(compra_venda, Len(venda) - posição2)

               If Len(depois2) > 1 Then

                   KeyAscii = 0

               End If

           End If

       End If

    End If

End Sub

 

Repare que usei o

nomedoform.text1.selstart = 2 , mas se no caso eu usar mais de um form nessa função como eu faço ? detalhe não finciona caso eu coloque nomedoform2.text1.selstart = 2 , ele já da pau , porque se eu chamar no Mudar_Preco ai da pau no Cadastrar_Produto . entendeu .

Link para o comentário
Compartilhar em outros sites

  • 0

O mais correto nesse caso seria passar a caixa de texto para a função e retornar o valor de KeyAscii (note que ali você usou KeyAscii... mas de onde está vindo essa variável??? dry.gif ). O código seria algo assim:

public function Vírgula(byref txt as textbox, byval keyascii as integer) as integer
  If KeyAscii <> 8 Then
       texto = txt.Text
       cursorpos = txt.SelStart
       
       posição = InStr(1, texto, ",")
       If cursorpos >= posição Then
           If posição > 0 Then
               depois = Right(texto, Len(texto) - posição)
               If Len(depois) > 1 Then
                   KeyAscii = 0
               End If
           End If
       End If
   End If
   Vírgula = keyascii
end function
E para utilizar essa função você teria que colocar no evento *KEYPRESS* de *CADA UMA* das textboxes, o seguinte:
keyascii = Vírgula(NOME_DA_TEXTBOX, keyascii)

Onde, é claro, você trocaria "NOME_DA_TEXTBOX" pelo respectivo nome da textbox.

Certo? wink.gif

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

ta dando problema ,

Erro :

Produce declaration does no match description of event or produce having the same name

Private Sub preco_compra_KeyPress() <------ erro ta aqui

keyascii = Vírgula(preco_compra.Text, keyascii)

End Sub

Public Function Vírgula(ByRef txt As TextBox, ByVal keyascii As Integer) As Integer

If keyascii <> 8 Then

      texto = txt.Text

      cursorpos = txt.SelStart

     

      posição = InStr(1, texto, ",")

      If cursorpos >= posição Then

          If posição > 0 Then

              depois = Right(texto, Len(texto) - posição)

              If Len(depois) > 1 Then

                  keyascii = 0

              End If

          End If

      End If

  End If

  Vírgula = keyascii

End Function

Link para o comentário
Compartilhar em outros sites

  • 0

ta dando problema ,

Erro :

Produce declaration does no match  description of event or produce having the same name

Private Sub preco_compra_KeyPress() <------ erro ta aqui 
keyascii = Vírgula(preco_compra.Text, keyascii)
End Sub

Claro. E a mensagem de erro é *bem* clara quanto ao porquê disso. Dê uma olhada em *qualquer* outra declaração de KeyPress em *qualquer* outro componente e você verá que não é essa daí que você colocou...

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

ixi mano não to conseguindo , quando faço assim não esta digitando nada , esta travando .

porque isso ocorre ?

Private Sub preco_compra_KeyPress(KeyAscii As Integer)

KeyAscii = Acerto(preco_compra, KeyAscii)

KeyAscii = Vírgula(preco_compra, KeyAscii)

End Sub

Public Function Acerto(ByRef txt2 As TextBox, ByVal KeyAscii2 As Integer) As Integer
txt2.SelStart = 2
End Function

Public Function Vírgula(ByRef txt As TextBox, ByVal KeyAscii As Integer) As Integer
 If KeyAscii <> 8 Then
      texto = txt.Text
      cursorpos = txt.SelStart
      cursospos = 2
      
      posição = InStr(1, texto, ",")
      If cursorpos >= posição Then
          If posição > 0 Then
              depois = Right(texto, Len(texto) - posição)
              If Len(depois) > 1 Then
                  KeyAscii = 0
              End If
          End If
      End If
  End If
  Vírgula = KeyAscii
End Function

Link para o comentário
Compartilhar em outros sites

  • 0

O que você ainda não entendeu é como o evento KeyPress funciona (não só ele, mas qualquer outro evento). Quando você digita a letra 'a', por exemplo, KeyPress é chamado da seguinte maneira:

keypress(97)
Por que 97? Porque esse é o código referente ao caracter 'a' na tabela ASCII/ANSI. E, para onde vai esse 97? Para o parâmetro KeyAscii da rotina. Então, se você alterar o valor de KeyAscii, consequentemente, você estará alterando a tecla digitada. Ou seja, se você fizer algo assim...
if keyascii=97 then keyascii=98

... fará com que se 'a' for pressionado a tecla pressionada seja, na verdade, 'b'. Então, você *só*, e *somente só* vai trocar KeyAscii se você quiser alterar a tecla pressionada. Então, pra quê você joga o retorno de "Acerto" para KeyAscii??? Aliás, qual o retorno de "Acerto" já que você não colocou nenhum? De uma forma ou de outra, ainda não entendi o que você quer fazendo essa função "Acerto"... qual seria, exatamente, o propósito dela?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
a função Acerto serveria para cetar o cursor após o sifrão quando o usuario clicar no campo textbox para digitar o valor da mercadoria .

Mas, você não precisaria criar uma função para isso. É só utilizar o evento GotFocus, não?

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0
você tem alguma ideia de como devo proceder ?

huh.gif FormatCurrency *só* e *somente só* vai aceitar um valor que possa ser convertido para um double (assim com a função cdbl() que converte uma expressão qualquer para um double). E "R$" com certeza não é um valor que possa ser convertido para double...

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...