none
Colocar tooltip no combobox !!! RRS feed

  • Pergunta

  • Bom dia galera...

    O meu programa possui um combobox com 5 itens. 3 deles dão pra ser lidos normalmente. E os outros dois são muito grandes e não dá pro usuário ler a opção toda. Já aumentei o tamanho do "DropDownWidth" mas ficou muito esquisito pois o texto fica enorme. Gostaria de colocar a tooltip no combobox mas não sei como.

    A LINGUAGEM É VISUAL BASIC !!!!!

    Alguém aí pode me ajudar ?

    Obrigado !!!!

    segunda-feira, 3 de abril de 2017 14:53

Respostas

  • Fiz um pequeno teste aqui com um control chamado comboBox1:

    Public Class Form1
        Dim ReadOnly _toolTip As New ToolTip()
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            _toolTip.AutoPopDelay = 0
            _toolTip.InitialDelay = 0
            _toolTip.ReshowDelay = 0
            _toolTip.ShowAlways = True
            ComboBox1.DrawMode = DrawMode.OwnerDrawFixed
    
            Dim source(0 To 5) As String
    
            source(0) = "Teste de Combo 1 - Texto muito Grande"
            source(1) = "Teste de Combo 2 - Texto muito Grande"
            source(2) = "Teste de Combo 3 - Texto muito Grande"
            source(3) = "Teste de Combo 4 - Texto muito Grande"
            source(4) = "Teste de Combo 5 - Texto muito Grande"
            source(5) = "Teste de Combo 6 - Texto muito Grande"
    
            comboBox1.DataSource = source
    
        End Sub
    
        Private Sub ComboBox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ComboBox1.DrawItem
            e.DrawBackground()
            Dim text As String = comboBox1.GetItemText(comboBox1.Items(e.Index))
            Using br As New SolidBrush(e.ForeColor)
                e.Graphics.DrawString(text, e.Font, br, e.Bounds)
            End Using
            If (e.State And DrawItemState.Selected) = DrawItemState.Selected AndAlso comboBox1.DroppedDown Then
                _toolTip.Show(text, comboBox1, e.Bounds.Right, e.Bounds.Bottom + 4)
            End If
            e.DrawFocusRectangle()
        End Sub
    End Class

    Att,


    Antero Marques
    ______________________________________________________________________________
    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta. O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    quinta-feira, 9 de novembro de 2017 18:02
  • Boa tarde Antero.

    Testei seu código e achei sensacional, nunca vislumbrei esta possibilidade, porém aqui (VS 2010) aprsentou um inconveniente:

    Após sair ou selecionar um item da combobox, o último tooltip continua exibido, não é apagado.

    Completei seu código assim:

    Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectionChangeCommitted
            _toolTip.RemoveAll()
    End Sub


    MARIANO1776

    domingo, 26 de novembro de 2017 17:35

Todas as Respostas

  • Bom dia galera...

    O meu programa possui um combobox com 5 itens. 3 deles dão pra ser lidos normalmente. E os outros dois são muito grandes e não dá pro usuário ler a opção toda. Já aumentei o tamanho do "DropDownWidth" mas ficou muito esquisito pois o texto fica enorme. Gostaria de colocar a tooltip no combobox mas não sei como.

    A LINGUAGEM É VISUAL BASIC !!!!!

    Alguém aí pode me ajudar ?

    Obrigado !!!!

    Não entendi muito bem, voce quer o tool type para que ??

    quinta-feira, 9 de novembro de 2017 16:33
  • Fiz um pequeno teste aqui com um control chamado comboBox1:

    Public Class Form1
        Dim ReadOnly _toolTip As New ToolTip()
        Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
            _toolTip.AutoPopDelay = 0
            _toolTip.InitialDelay = 0
            _toolTip.ReshowDelay = 0
            _toolTip.ShowAlways = True
            ComboBox1.DrawMode = DrawMode.OwnerDrawFixed
    
            Dim source(0 To 5) As String
    
            source(0) = "Teste de Combo 1 - Texto muito Grande"
            source(1) = "Teste de Combo 2 - Texto muito Grande"
            source(2) = "Teste de Combo 3 - Texto muito Grande"
            source(3) = "Teste de Combo 4 - Texto muito Grande"
            source(4) = "Teste de Combo 5 - Texto muito Grande"
            source(5) = "Teste de Combo 6 - Texto muito Grande"
    
            comboBox1.DataSource = source
    
        End Sub
    
        Private Sub ComboBox1_DrawItem(sender As Object, e As DrawItemEventArgs) Handles ComboBox1.DrawItem
            e.DrawBackground()
            Dim text As String = comboBox1.GetItemText(comboBox1.Items(e.Index))
            Using br As New SolidBrush(e.ForeColor)
                e.Graphics.DrawString(text, e.Font, br, e.Bounds)
            End Using
            If (e.State And DrawItemState.Selected) = DrawItemState.Selected AndAlso comboBox1.DroppedDown Then
                _toolTip.Show(text, comboBox1, e.Bounds.Right, e.Bounds.Bottom + 4)
            End If
            e.DrawFocusRectangle()
        End Sub
    End Class

    Att,


    Antero Marques
    ______________________________________________________________________________
    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta. O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    quinta-feira, 9 de novembro de 2017 18:02
  • Boa tarde.

    Você utiliza o vb.net, correto?


    MARIANO1776

    domingo, 26 de novembro de 2017 16:54
  • Boa tarde Antero.

    Testei seu código e achei sensacional, nunca vislumbrei esta possibilidade, porém aqui (VS 2010) aprsentou um inconveniente:

    Após sair ou selecionar um item da combobox, o último tooltip continua exibido, não é apagado.

    Completei seu código assim:

    Private Sub ComboBox1_SelectionChangeCommitted(sender As Object, e As System.EventArgs) Handles ComboBox1.SelectionChangeCommitted
            _toolTip.RemoveAll()
    End Sub


    MARIANO1776

    domingo, 26 de novembro de 2017 17:35
  • Que bom Mariano. A intenção é sempre melhorar o código de forma colaborativa.

    Att,


    Antero Marques
    ______________________________________________________________________________
    Se a resposta for útil, marque como útil, se respondeu totalmente sua dúvida, marque como resposta. O Fórum MSDN é utilizado também como base de conhecimento, então é responsabilidade de todos mantê-lo organizado e funcional.


    domingo, 26 de novembro de 2017 20:13