Jump to content
zephirus

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

Recommended Posts

zephirus

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.

Share this post


Link to post
Share on other sites
jpaulino

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

Share this post


Link to post
Share on other sites
zephirus

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.

Share this post


Link to post
Share on other sites
jpaulino

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

Share this post


Link to post
Share on other sites
jpaulino

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

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

Share this post


Link to post
Share on other sites
zephirus

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

Share this post


Link to post
Share on other sites
jpaulino

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

Perguntei se a DataGrid3 é uma DataGridView.

Share this post


Link to post
Share on other sites
zephirus

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.