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

Condições Na Máscara


alexandremanowar

Pergunta

E aí pessoal

Eu fiz uma máscara usando a ferramenta Microsof Marked Edit Control ela esta funcionando normal porém eu quero fazer um condição que se o usuário tentar passar sem preencher a máscara ele da uma MSN de advertência para o usuário preencher. É uma máscara de data. Já tentei as seguintes formas:

If data.Mask = data.MaskLegth Then
            MsgBox("Preencha o campo data", MsgBoxStyle.Exclamation, "Atenção")
            data.Focus()
 End If
If data.Mask = data.Text.LengthThen
            MsgBox("Preencha o campo data", MsgBoxStyle.Exclamation, "Atenção")
            data.Focus()
 End If

E outros modos que não funcionaram.

Onde estou errando?

Link para o comentário
Compartilhar em outros sites

15 respostass a esta questão

Posts Recomendados

  • 0

E a e Graymalkin beleza

Então cara eu já usei fiz assim:

If data.Text = data.Text.Empty Then
            MsgBox("Preencha o campo data", MsgBoxStyle.Exclamation, "Atenção")
            data.Focus()
End If
If data.Text = "" Then
            MsgBox("Preencha o campo data", MsgBoxStyle.Exclamation, "Atenção")
            data.Focus()
End If

Porém não funcionou! Estou tentando esvaziar também assim que o cadastro é feito. Tentei assim:
data.Text = ""
data.Text = data.Text.Empty

Nenhuma das duas funcionaram, tentei esvaziar com usando a propriedade Mask mas também não funcionou.

Eu errei alguma coisa na condição? Ainda não achei o erro

Valeu pela ajuda

Link para o comentário
Compartilhar em outros sites

  • 0

E a e Graymalkin beleza

Então cara eu já usei fiz assim:

If data.Text = data.Text.Empty Then
            MsgBox("Preencha o campo data", MsgBoxStyle.Exclamation, "Atenção")
            data.Focus()
End If
If data.Text = "" Then
            MsgBox("Preencha o campo data", MsgBoxStyle.Exclamation, "Atenção")
            data.Focus()
End If

Porém não funcionou! Estou tentando esvaziar também assim que o cadastro é feito. Tentei assim:
data.Text = ""
data.Text = data.Text.Empty

Nenhuma das duas funcionaram, tentei esvaziar com usando a propriedade Mask mas também não funcionou.

Eu errei alguma coisa na condição? Ainda não achei o erro

Não, agora você fez certo. A propriedade Text não está retornando nada, quando deveria retornar o texto com a máscara. O MaskEdit é mesmo uma porcaria, desde a época do VB5. E, este daí é o do VB6, porque é um componente COM e não um componente .NET. Eu aconselharia você dar uma olhada no DateBox do Input32X:

http://scriptbrasil.com.br/forum/index.php?showtopic=75775

http://scriptbrasil.com.br/forum/index.php?showtopic=60436

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Eu lembro desse material que você me passou! Na época eu não consegui instalar ele por isso usei esse outro recurso. Vou ler o material denovo e tentar instalar aqui se eu travar eu posto aqui.

Valeu pela força.

Link para o comentário
Compartilhar em outros sites

  • 0

E aí pessoal!

Estou tendo problemas com o Input32X, por exemplo eu intalalei ele, mas não esta funcionando.

Se eu usar a Input32X.DateBox por exemplo. Eu clico nessa opção vou no form e tento desenhar ela no form, quando solto o mouse simplesmente não aparece nada na tela. Ele me diz em seguida que esta faltando o componente mscomct2.ocx.

Eu apenas instalei o Input32X e adicionei na ToolBar junto com as outras ferramentas, preciso fazer mais alguma coisa? E essa dll que o Vader comentou onde ela fica não achei? Instalei mas não achei nenhuma dll.

Onde estou errando? Eu estou usando o VB.NET 2005 Experess Edition!

Eu achei uma opção nova no vb.net 2003 que é a MaskedTextBox1 é uma boa alternativa?

Link para o comentário
Compartilhar em outros sites

  • 0

Olá alexandremanowar.

Não sei o que você instalou!!

Eu peguei apenas a input32.dll (para .net) e input32.ocx (para vb6), copiei os arquivos na pasta system32 e no tollbar eu coloquei para alterar. Depois procurei o input32.dll e adicionei, daí apareceu as opções de text, mask dele.... agora eu não vi nada instalavel!!

Esse é o link, tirado de um post do grande Gray:

http://www.gs.kitbr.com/stuff/Input32X.NET.zip

Espero ter ajudado...

Link para o comentário
Compartilhar em outros sites

  • 0

E aí pessoal beleza!

Então copiei o arquivo input32.dll para a pasta system32, depois adicionei na no toolbox, porém eu insiro um objeto no form tipo o datebox e quando executo o sistema dá pau e diz que a biblioteca não é reconhecida. Tentei fazer várias vezes mas deu pau!

Então usando o vb.net achei o MaskedTextBox2 que resolveu bem o meu problema ou melhor quase bem. Eu criei um campo para digitar valores numéricos porém estou com problema para preencher o campo, o problema é que valor em moeda é preenchido da direita para esquerda, mas o padrão dos sistemas é da esquerda para a direita. Eu preciso que o campo seja preenchido igual um caixa de banco, seria assim:

Se eu for digitar o valor 423,12 ele teria que preencher assim:

0,04

0,42

4,23

42,31

423,1

423,12

E não estou conseguindo fazer o preenchimento dessa forma.

Alguém pode me ajudar?

Link para o comentário
Compartilhar em outros sites

  • 0
Guest Visitante

E a e Vader beleza!

Então cara eu quero usar o input32 peguei o input32.dll e copiei para a pasta system32 do windows adicionei ela no toolBar as opções apareceram mas quando eu insiro no form mas quando eu executo o form ela da pau e me da uma mensagem de erro!

Esta faltando eu copiar algum arquivo? Eu vi que o input32 tem uma opção de moeda eu tentei usar mas da o erro que mostrei acima!

Preciso muito fazer essa máscara! Me ajude nisso por favor.

Link para o comentário
Compartilhar em outros sites

  • 0

ops esse aí em cima sou eu rsrsr.

Aproveirtando eu estou tentando fazer essa máscara de um modo diferente, estou tentando fazer usando o TextBox mesmo, estou tentando algumas lógicas mas não tive exito. Olha a idéia:

Dim limite As Integer = 0
Dim incluir As String
If TextBox1.Text.Lenght > 0 And limite = 0  Then
  
  incluir = TextBox1.Text & ","
  TextBox1.Text = incluir
   limite = 1
End If
......

Essa parte do .... já tentei várias coisas, já tentei trabalhar com loops fo, while,etc e outras formas, mas ainda não consegui um bom resultado. A minha idéia é preencher o TextBox e toda a vez que ele chegar a 2 caracteres ele adiciona a vírgula e continua preenchendo o TextBox por isso estou insistindo em usar loop, se alguém tiver alguma idéia e quiser resolver esse problema comigo vai ser muito legal. Afinal acredito que é um modo de suprir essa necessidade.

Alguém pode dar uma ajuda nesse esquema que estiu montando?

Link para o comentário
Compartilhar em outros sites

  • 0

Bom, você pode fazer isso no evento KeyPress da TextBox:

        Static separador As String = ","
        Static válidos As String = "0123456789" & Chr(Keys.Back)

        e.Handled = True
        If válidos.Contains(e.KeyChar) Then
            Dim txt As TextBox = sender
            Dim texto As String = txt.Text.Replace(separador, "")

            If e.KeyChar = Chr(Keys.Back) Then
                If txt.Text.Length > 0 Then
                    texto = texto.Substring(0, texto.Length - 1)
                End If
            Else
                texto = texto & e.KeyChar
            End If
            If texto.Length > 2 Then
                texto = texto.Insert(texto.Length - 2, separador)
            End If
            txt.Text = texto
        End If

Acho que o preenchimento fica exatamente como você quer. Dê uma olhada.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

E aí Graymalkin beleza!

Cara ficou bacana! o Código inteiro ficou assim:

Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles TextBox3.KeyPress
        Static separador As String = ","
        Static válidos As String = "0123456789" & Chr(Keys.Back)

        e.Handled = True
        If válidos.Contains(e.KeyChar) Then
            Dim txt As TextBox = sender
            Dim texto As String = txt.Text.Replace(separador, "")

            If e.KeyChar = Chr(Keys.Back) Then
                If txt.Text.Length > 0 Then
                    texto = texto.Substring(0, texto.Length - 1)
                End If
            Else
                texto = texto & e.KeyChar
            End If
            If texto.Length > 2 Then
                texto = texto.Insert(texto.Length - 2, separador)
            End If
            txt.Text = texto
        End If
    End Sub

Então cara eu estou estudando esse código, mas não estou entendendo ele por completo. Preciso entender e aprender. Sem querer encomodar mas você poderia dar uma explicação linha à linha desse código que você me passou? O entendimento de tudo é que importa.

E tabém vai ficar um mini tutorial aqui para o pessoal estudar.

Valeu cara

Link para o comentário
Compartilhar em outros sites

  • 0

Então cara eu estou estudando esse código, mas não estou entendendo ele por completo. Preciso entender e aprender. Sem querer encomodar mas você poderia dar uma explicação linha à linha desse código que você me passou? O entendimento de tudo é que importa.

E também vai ficar um mini tutorial aqui para o pessoal estudar.

Sim, claro. Vou separar em blocos para ficar melhor de explicar:

Static separador As String = ","
Static válidos As String = "0123456789" & Chr(Keys.Back)
Aqui definimos qual é o separador (no caso, a vírgula) e quais a teclas válidas (de 0 a 9 e mais o Backspace). Uma declaração estática (Static) só é executada na primeira vez que é chamada, portanto poupamos esse trabalho nas chamadas subsequentes.
e.Handled = True
Aqui definimos a propriedade Handled (do Inglês, "capturada", "segurada", ou qualquer coisa que indique que algo foi pego ou segurado) do objeto e, que faz parte da declaração do evento, como True para indicar que trataremos a execução do evento manualmente. Isso previne que a tecla digitada apareça na textbox, como seria o normal. No caso, nós a colocaremos lá, se for o caso, é claro.
If válidos.Contains(e.KeyChar) Then
Aqui verifica-se se a tecla digitada (que está em e.KeyChar) está contida em "válidos" (que só tem de 0 a 9 e mais o Backspace). Qualquer outra tecla será ignorada, no caso.
    Dim txt As TextBox = sender
    Dim texto As String = txt.Text.Replace(separador, "")
Aqui obtemos a textbox que chamou o evento (que está em sender). E também o texto contido nela, sem o separador (por isso usamos Replace() para substituir o separador por nada [""]).
    If e.KeyChar = Chr(Keys.Back) Then
        If txt.Text.Length > 0 Then
        texto = texto.Substring(0, texto.Length - 1)
        End If
    Else
        texto = texto & e.KeyChar
    End If
Verificamos se a tecla digitada é o Backspace. Se for, verificamos se o texto tem mais do que 0 caracteres (ou seja, se realmente existe algum texto, e não uma string vazia). Se for o caso, usamos o método Substring() para obter o texto todo menos o último caracter. Para isso basta mandar pegar a quantidade de caracteres (texto.Length) subtraindo 1 (-1). Se a tecla digitada não for o Backspace, vai cair no Else, então ela só poderá ser um valor de 0 a 9 (pois já eliminamos as outras possibilidades no primeiro If). Nesse caso, juntamos a tecla digitada com o texto.
If texto.Length > 2 Then
    texto = texto.Insert(texto.Length - 2, separador)
End If
txt.Text = texto

Como trabalhamos com o texto sem o separador, basta aqui olhar se ele tem mais do que 2 caracteres (123, por exemplo). Quando for este o caso, inserimos o separador na segunda posição a partir do final do texto (basta subtrair 2 do tamanho do texto). Em seguida, colocamos o texto (agora com o separador) novamente na caixa de texto (txt.Text).

Como o processo acima é executado para *cada* tecla que você digita, o grande lance aqui, que facilita muito o trabalho, é *sempre* retirar o separador no começo da verificação e depois colocá-lo ou não (de acordo com a quantidade de caracteres).

Certo? ;) Qualquer dúvida, 'stamos aí.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

E aí beleza!

Cara agora eu entedi! eu estava enrolado nessa mesmo nessa parte:

If e.KeyChar = Chr(Keys.Back) Then
        If txt.Text.Length > 0 Then
        texto = texto.Substring(0, texto.Length - 1)
        End If
    Else
        texto = texto & e.KeyChar
    End If

Eu não sabia que era para validar o Backspece, pensei que tinha a ver com o separador, por esse motivo eu estava tendo problemas para entender o resto do código.

Valeu cara, essa eu aprendi legal.

at+

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,1k
    • Posts
      651,8k
×
×
  • Criar Novo...