• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

zephirus

[Resolvido] Retirar número do controle e usar como integer

9 mensagens neste tópico

Olá,

A situação é a seguinte. Tenho um label de nome 'label23'. Eu quero que ao clicar nele, retirar a informação numérica (o 23) e somar a esse número por exemplo 5. O meu código é este:

Sub Label23Click(sender As Object, e As System.Windows.Forms.MouseEventArgs)

Dim a As text = sender.name.substring(5,2)

Dim x As integer = a + 5

End Sub

Eu sei que estou a dimensionar a variável a como texto mas é precisamente esse o meu problema. Não consigo fazer a conversão para integer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Não sei bem qual o objectivo, mas o teu código pode sem dúvida ser melhorado.

1 - Não utilizas o intellissense com esse "sender.name.substring(5,2)". Deves utilizar um DirectCast ou Ctype para converter o teu objecto

2 - Depois no SubString basta indicar o início, ou seja, se for label1 ou label100 basta indicar SubString(5) e ele devolve a partir do primeiro número.

3 - Falta validares o resultado, ou seja se é mesmo numérico.

Exemplo:

    Private Sub Label23_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label23.Click
        Dim lbl As Label = DirectCast(sender, Label)
        Dim num, result As Integer
        If Integer.TryParse(lbl.Name.Substring(5), num) Then
            result = num + 5
        End If
        Debug.WriteLine(result)
    End Sub

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Olá,

Não sei bem qual o objectivo, mas o teu código pode sem dúvida ser melhorado.

1 - Não utilizas o intellissense com esse "sender.name.substring(5,2)". Deves utilizar um DirectCast ou Ctype para converter o teu objecto

2 - Depois no SubString basta indicar o início, ou seja, se for label1 ou label100 basta indicar SubString(5) e ele devolve a partir do primeiro número.

3 - Falta validares o resultado, ou seja se é mesmo numérico.

Exemplo:

    Private Sub Label23_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label23.Click
        Dim lbl As Label = DirectCast(sender, Label)
        Dim num, result As Integer
        If Integer.TryParse(lbl.Name.Substring(5), num) Then
            result = num + 5
        End If
        Debug.WriteLine(result)
    End Sub

Epá, tu és o maior, a sério. Tens me ajudado bastante e ainda por cima és rápido.

O que faz mesmo esse DirectCast, não percebi. E o Integer.Tryparse verifica se é inteiro certo?

Quanto ao substring, o que tu estás a dizer é que se eu tiver um label25 e um label154, para tirar os números basta indicar o início que ele no primeiro retira '25' e no segundo '154', é isto?

EDIT: afinal não está a resultar.

O meu código mais alargado e já com a tua sugestão:

Sub Label72Click(sender As Object, e As System.Windows.Forms.MouseEventArgs)
   Dim contextitem As New ToolStripMenuItem
   Dim lbl As Label = DirectCast(sender, Label)
   Dim num, result As Integer

   If Integer.TryParse(lbl.Name.Substring(5), num) Then
      result = System.Math.Abs(72 - num)
   End If

   Me.Text = result
   contextitem.Text = DataGrid3.Item(result, i + 4)
   contextMenuStrip1.Items.Add(contextitem)
End Sub

Ele queixa-se na linha onde vou buscar o valor à DataGrid3. Diz que não pode converter para integer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O DirectCast (ou o Ctype) converte um objecto em outro e deste modo tens acesso ao intellissence.

O Integer.TryParse tenta converte uma string para um inteiro (neste caso)  e o seu resultado é booleano. Podes ver se é mesmo um inteiro ou não e converter a string.

Finalmente o substring podes fazer como tinhas mas podes apenas indicar o inicio de onde queres "cortar". Por exemplo:

"label1" se indicares substring(5) vai recolher tudo com inicio no 5 caracter. Se tiver "label12345" guardas 12345.

Algumas referências:

DirectCast: http://msdn.microsoft.com/en-us/library/7k6y2h6x.aspx

Integer.TryParse: http://msdn.microsoft.com/en-us/library/f02979c7.aspx

SubString: http://msdn.microsoft.com/en-us/library/hxthx5h6.aspx

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas isso é batota  :P mostras uma coisa e depois apresentas outra.

DataGrid3 é uma DataGridView ? E que valor queres ir buscar ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mas isso é batota  :P mostras uma coisa e depois apresentas outra.

DataGrid3 é uma DataGridView ? E que valor queres ir buscar ?

Não sei se percebi o que queres dizer mas acho que já resolvi o meu problema. Modifiquei a linha para:

contextitem.Text = DataGrid3.Item(result, i + 4).ToString

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, porque o código que te mostri está a trabalhar, agora essa parte da DataGrid3 ...

Perguntei se a DataGrid3 é uma DataGridView.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok, porque o código que te mostri está a trabalhar, agora essa parte da DataGrid3 ...

Perguntei se a DataGrid3 é uma DataGridView.

É so datagrid sem ser view. De facto mudei o código depois, sorry  :P

0

Partilhar esta mensagem


Link 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