Ir para o conteúdo
Tuba

Problema em permitir apenas números e excluir letras

Mensagens Recomendadas

Tuba

Estou a fazer um pequeno programa para preencher uma matriz 4 por 4, através de uma InputBox. O programa permite inserir apenas números. O meu problema está aí, consegui excluir as letras, mas ao introduzir uma letra aparece sempre na tabela o número zero. Para contornar isso inseri o Do...Loop...mas não sei como dizer "fazer loop até ser apenas número" na linha seguinte:

Loop Until Grelha(i, j).Value = ????

Este é o código que tenho até agora:

Public Class Form2
Dim matriz(3, 3) As Integer

Private Sub DataGridView1_CellContentClick(sender As System.Object, e As System.Windows.Forms.DataGridViewCellEventArgs) Handles Grelha.CellContentClick

End Sub

Private Sub Form2_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Grelha.Rows.Add(3)
End Sub

Private Sub btnpreencher_Click(sender As System.Object, e As System.EventArgs) Handles btnpreencher.Click
Dim keyAscii As Integer

For i = 0 To 3
For j = 0 To 3
matriz(3, 3) = Val(InputBox("Qual o número da coluna " & i & " da " & "linha " & "" & j & "?"))
Grelha(i, j).Value = matriz(3, 3) & vbNewLine
Do
If Grelha(i, j).Value = keyAscii Then
MessageBox.Show("Insira apenas números!")
matriz(3, 3) = Val(InputBox("Qual o número da coluna " & i & " da " & "linha " & "" & j & "?"))
End If
Loop Until Grelha(i, j).Value =
Next
Next

End Sub


End Class

Agradecia muito a ajuda.

Editado por Caça
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
veaoum

Esta solução é atravez de textbox:

Public Function camponumero(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) As Integer
    e.Handled = True 'Isto cancela a tecla que carreguei
    If IsNumeric(e.KeyChar) Or e.KeyChar = Chr(8) Then _
	   e.Handled = False 'Isto faz com que a tecla seja lida para colocar no campo.
    Return 1
   End Function
Private Sub txtnsaude_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txtnsaude.KeyPress
    camponumero(sender, e)
   End Sub

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

O que pretendes com a variável "keyAscii" ?

Estás basicamente a testar se o valor inserido é igual a zero...

Tens outros problemas antes desse, nomeadamente o facto de estares a iterar as posições da matriz mas a atribuír efectivamente apenas uma posição, a última (3,3).

Estás a misturar newLines ali por o meio também para quê?

Tens aí muitas confusões.

Vou-te deixar um exemplo rápido que faz o que pretendes:

        Dim Matriz(3, 3) As Integer
       Dim PosX As Integer = 0
       Dim PosY As Integer = 0
       Dim Valor As String = String.Empty

       While Not IsNumeric(Valor)
           Valor = InputBox(String.Format("Insira um número para a posição x={0} e y={1}", PosX + 1, PosY + 1), "Inserir número")
           If Not IsNumeric(Valor) Then
               MessageBox.Show("Tem de ser um número!", "Apenas números", MessageBoxButtons.OK, MessageBoxIcon.Error)
               Continue While
           End If
           Matriz(PosX, PosY) = Integer.Parse(Valor)
           Valor = String.Empty
           PosX += 1
           If PosX = 4 Then PosY += 1 : PosX = 0
           If PosY > 3 Then Exit While
       End While

Fica ao teu critério se queres fazer Copy/Paste e ficar a perceber o mesmo, ou tirar dúvidas ;)

Editado por ribeiro55

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.