none
Impedir que digite letras, espaços e fazer a substiuição da ','(virgula) pelo '.'(ponto) RRS feed

  • Pergunta

  • Boa Tarde, estou enfrentado um problema em um programa para faculdade, que estou fazendo.

    Ele é uma calculadora de media, media final e prova final, composto por 7 TextBox, onde serão digitado os valores das provas, então surge o problema, o usuário não pode digitar letras, nem espaços nos campos, apenas números, e quando for colocado a vírgula, substitui-la pelo ponto, porque o sistema decimal brasileiro é diferente do inglês.

    Inserir o seguinte código em um dos textbox:

    private void txtMA_KeyPress(object sender, KeyPressEventArgs e)
            {
                if (!char.IsNumber(e.KeyChar))
                {
                    e.Handled = true;
                }
            }

    E fiz uma chamada em todos os outros, exemplo:

                // 
                // txtAV4
                // 
                this.txtAV4.Location = new System.Drawing.Point(312, 105);
                this.txtAV4.Name = "txtAV4";
                this.txtAV4.Size = new System.Drawing.Size(100, 20);
                this.txtAV4.TabIndex = 5;
                this.txtAV4.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtMA_KeyPress);
                // 
                // txtAV3
                // 
                this.txtAV3.Location = new System.Drawing.Point(312, 71);
                this.txtAV3.Name = "txtAV3";
                this.txtAV3.Size = new System.Drawing.Size(100, 20);
                this.txtAV3.TabIndex = 4;
                this.txtAV3.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.txtMA_KeyPress);

    Porem, ao executar o programa, ele não só impede de digitar letras, como também a pontuação e o Backspace não funcionam.

    O programa é composto por 3 botões de calcular e 1 de limpar os campos. Ao clicar em um dos botões de calculo ele simplesmente verifica se alguns radiosbutton estão marcados e executa o método do calculo(aqui cada radiobutton marcado ira fazer a verificação se os campos estão vazio).

    double Media, AV1, AV2, AV3, AV4;
                //===================================== Calcular Media!!!
                if (rbMA.Checked == true)
                {
                    if (txtAV1.Text == "" || txtAV2.Text == "" || txtAV3.Text == "" || txtAV4.Text == "")
                    {
                        MessageBox.Show("Verifique se algum campo não esta vazio!", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    }
                    else
                    {
                        AV1 = Convert.ToDouble(txtAV1.Text) * 2.5;
                        AV2 = Convert.ToDouble(txtAV2.Text);
                        AV3 = Convert.ToDouble(txtAV3.Text) * 2.5;
                        AV4 = Convert.ToDouble(txtAV4.Text);
    
                        Media = (AV1 + AV2 + AV3 + AV4)/7;
    
                        txtMA.Text = Convert.ToString(Media);
                    }
                }           
    Como dito anteriormente, preciso saber como fazer para os textbox não conterem letra, nem espaços e as vírgulas serem substituídas pelo ponto? Obrigado
    terça-feira, 9 de junho de 2015 16:14

Respostas

  • Olá Breno.Nunes

    Fiz um trecho de código, acredito que vá resolver o seu problema o espaço é só seguir a mesma linha coloca o valor Decimal de espaços e faz a validação igual a vírgula e o ponto. Abaixo um trecho de código.

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
                {
    
                //44	2C	,	Vírgula
                //46	2E	.	Ponto ou ponto final
    
                if (!char.IsNumber(e.KeyChar))
                    {
                    if (e.KeyChar == ',') // 44 valor Dec
                        {
                        e.KeyChar = '.'; // 46 valor Dec
                        }
                    else
                        {
                        e.Handled = true;
                        }
                    }
    
                }

    Espero ter ajudado :)

    terça-feira, 9 de junho de 2015 17:16

Todas as Respostas

  • Já tentou usar o controle NumericUpDown?

    Abraço!


    terça-feira, 9 de junho de 2015 16:31
  • Olá Breno.Nunes

    Fiz um trecho de código, acredito que vá resolver o seu problema o espaço é só seguir a mesma linha coloca o valor Decimal de espaços e faz a validação igual a vírgula e o ponto. Abaixo um trecho de código.

    private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
                {
    
                //44	2C	,	Vírgula
                //46	2E	.	Ponto ou ponto final
    
                if (!char.IsNumber(e.KeyChar))
                    {
                    if (e.KeyChar == ',') // 44 valor Dec
                        {
                        e.KeyChar = '.'; // 46 valor Dec
                        }
                    else
                        {
                        e.Handled = true;
                        }
                    }
    
                }

    Espero ter ajudado :)

    terça-feira, 9 de junho de 2015 17:16
  • Boa Amigos, gostaria de agradecer a ajuda de Bruno Maschio Joaquim, mas a resposta de Paulemberg funcionou como eu queria. Obrigado!

    Paulemberg muito obrigado pela ajuda, seu código funcionou perfeitamente, só adicionei o parâmetro de controle e mudei o '.'(ponto) pela ',' vírgula. Nem acredito que perdi tanto tempo para solucionar algo tão simples. Segue o código como ficou:

    if (!(char.IsNumber(e.KeyChar) || char.IsControl(e.KeyChar)))
                {
                    if (e.KeyChar == ',' || e.KeyChar == '.')
                    {
                        e.KeyChar = ',';
                    }
                    else
                    {
                        e.Handled = true;
                    }
                }
    Tive que criar outra conta, pois a anterior não estava vinculada no e-mail.
    quinta-feira, 11 de junho de 2015 01:56