none
Conteúdo de um tooltip muito longo RRS feed

  • Pergunta

  • Olá

    Eu tenho uma string e gostaria que cada tantos caracteres inserisse uma nova linha automaticamente, mas respeitando as palavras. Ex.:

    Preciso ir visitar

    meus amigos

    mais vezes.

    O motivo disso é que estou usando um tooltip que ao passar o mouse fica muito longo. Não posso usar um "vbCrLf" manualmente pois o texto muda devido aos idiomas. Gostaria de algo semelhante a mensagem box, que joga pra baixo as palavras mantendo sempre um padrão de tamanho horizontal.

    Quem puder me ajudar agradeço.

    terça-feira, 14 de agosto de 2018 01:02

Respostas

  • Eliseu5,

       Agora entendi.
       Bom... tenho uma ideia, mas você julga se é boa ou não...

       ... você "conta" um determinado número de caracteres que acha adequado, por exemplo: "50". E depois pega o primeiro espaço antes ou depois desse número. nesse ponto você coloca um "vbcrlf".

       Exemplo de um texto (com as quebras):
    -----------------------------------------------------------------------------
    Aqui quero escrever um texto longo, mas bem longo nessa 
    célula. Precisamos achar um ponto de quebra adequado, 
    será que funcionou? espero que sim!
    -----------------------------------------------------------------------------

       Esse código está feio, mas é por aqui:

    Public Function testeString() As String Const ValorFixo = 10 Dim strTextoOriginal As String = "Aqui quero escrever um texto longo, mas bem longo nessa célula. Precisamos achar um ponto de quebra adequado, será que funcionou? espero que sim!" Dim strTextoFinal As String = "" Dim intPosicaoInicial = 0 Dim intTamanhoTexto = strTextoOriginal.Length() Dim intPosicaoEspaco = ValorFixo

            If intTamanhoTexto <= intValorFixo Then strTextoFinal = strTextoOriginal While intTamanhoTexto > ValorFixo intPosicaoEspaco = strTextoOriginal.IndexOf(" ", intPosicaoEspaco)

                If intPosicaoEspaco <= 0 Then Exit While

    strTextoFinal = strTextoFinal + strTextoOriginal.Substring(intPosicaoInicial, intPosicaoEspaco - intPosicaoInicial).TrimStart() + vbCrLf intPosicaoInicial = intPosicaoEspaco intTamanhoTexto = strTextoOriginal.Length() - intPosicaoInicial If ValorFixo < intTamanhoTexto Then intPosicaoEspaco = intPosicaoEspaco + ValorFixo Else strTextoFinal = strTextoFinal + strTextoOriginal.Substring(intPosicaoInicial, intTamanhoTexto).TrimStart() End If End While Return strTextoFinal End Function

    =========================================================

    VB.NET - Strings : um novo enfoque.
    2- Obtendo partes de uma string (substrings) - Substring

    http://www.macoratti.net/vbn_str.htm
    =========================================================

    []'s,
    Fabio I.

    • Editado Fabio I terça-feira, 14 de agosto de 2018 14:43
    • Marcado como Resposta Eliseu5 terça-feira, 14 de agosto de 2018 15:43
    terça-feira, 14 de agosto de 2018 12:00

Todas as Respostas

  • Eliseu5,

        Talvez usando o "chr(10)" ou o "chr(13)":
    Replace(str, chr(10), "porção de coisas")
    Replace(str, chr(13), "porção de coisas")

    ================================================
    Caracter quebra de linha
    https://social.msdn.microsoft.com/Forums/pt-BR/84662e14-7edd-4332-8ab7-cd94fc94fe89/caracter-quebra-de-linha?forum=vsvbasicpt
    ================================================

       Uma outra forma de fazer isso é utilizando o objeto RegEx (System.Text.RegularExpressions). Este objeto possui o método Unescape, capaz de interpretar e substituir os símbolos dentro de mensagens.

       Veja:

    RegEx.Unescape("uma linha\noutra linha")
    ================================================
    Dicas.NET - Utilizando caracteres especiais com VB.NET
    https://www.devmedia.com.br/dicas-net-utilizando-caracteres-especiais-com-vb-net/2877
    ================================================

    []'s,
    Fabio I.
    • Editado Fabio I terça-feira, 14 de agosto de 2018 01:12
    terça-feira, 14 de agosto de 2018 01:10
  • Olá Fabio

    Obrigado pela resposta, no entanto meu problema não é como pular linha, pois o vbCrLf funciona muito bem.

    Um exemplo, meu tooltip aparece em uma unica linha:


    Quando ele for muito longo, fica ridículo.

    Preciso que quebre a linha automaticamente como em uma msgbox:

    Só que não posso fazer isso manualmente como:

    "Google LLC é uma empresa multinacional de serviços online e software" & vbcrlf &

    "dos Estados Unidos..."

    pois a frase não é sempre a mesma.

    Então pensei que talvez existisse um método de pegar uma frase e cada x caracteres, adiciona-se um "vbcrlf" entre palavras.

    terça-feira, 14 de agosto de 2018 03:03
  • Eliseu5,

       Agora entendi.
       Bom... tenho uma ideia, mas você julga se é boa ou não...

       ... você "conta" um determinado número de caracteres que acha adequado, por exemplo: "50". E depois pega o primeiro espaço antes ou depois desse número. nesse ponto você coloca um "vbcrlf".

       Exemplo de um texto (com as quebras):
    -----------------------------------------------------------------------------
    Aqui quero escrever um texto longo, mas bem longo nessa 
    célula. Precisamos achar um ponto de quebra adequado, 
    será que funcionou? espero que sim!
    -----------------------------------------------------------------------------

       Esse código está feio, mas é por aqui:

    Public Function testeString() As String Const ValorFixo = 10 Dim strTextoOriginal As String = "Aqui quero escrever um texto longo, mas bem longo nessa célula. Precisamos achar um ponto de quebra adequado, será que funcionou? espero que sim!" Dim strTextoFinal As String = "" Dim intPosicaoInicial = 0 Dim intTamanhoTexto = strTextoOriginal.Length() Dim intPosicaoEspaco = ValorFixo

            If intTamanhoTexto <= intValorFixo Then strTextoFinal = strTextoOriginal While intTamanhoTexto > ValorFixo intPosicaoEspaco = strTextoOriginal.IndexOf(" ", intPosicaoEspaco)

                If intPosicaoEspaco <= 0 Then Exit While

    strTextoFinal = strTextoFinal + strTextoOriginal.Substring(intPosicaoInicial, intPosicaoEspaco - intPosicaoInicial).TrimStart() + vbCrLf intPosicaoInicial = intPosicaoEspaco intTamanhoTexto = strTextoOriginal.Length() - intPosicaoInicial If ValorFixo < intTamanhoTexto Then intPosicaoEspaco = intPosicaoEspaco + ValorFixo Else strTextoFinal = strTextoFinal + strTextoOriginal.Substring(intPosicaoInicial, intTamanhoTexto).TrimStart() End If End While Return strTextoFinal End Function

    =========================================================

    VB.NET - Strings : um novo enfoque.
    2- Obtendo partes de uma string (substrings) - Substring

    http://www.macoratti.net/vbn_str.htm
    =========================================================

    []'s,
    Fabio I.

    • Editado Fabio I terça-feira, 14 de agosto de 2018 14:43
    • Marcado como Resposta Eliseu5 terça-feira, 14 de agosto de 2018 15:43
    terça-feira, 14 de agosto de 2018 12:00
  • Meu amigo, show de bola.

    Era isso mesmo, só precisei  alterar no final, pois se tiver apenas uma linha como no texto: "Esta opção solicita senha para acessar o executável." não retorna nada, no meu caso com valor fixo 50.

      If String.IsNullOrEmpty(strTextoFinal) Then
                Return strTextoOriginal
            Else
                Return strTextoFinal
            End If

    Muito obrigado, Deus abençoe. :)

    terça-feira, 14 de agosto de 2018 15:43
  • Eliseu5,

        É verdade! Fiz uma modificação depois de postar!

    If intTamanhoTexto <= intValorFixo Then strTextoFinal = strTextoOriginal

        CUIDADO! Percebi outro erro, às vezes dependendo o tamanho da última palavra, a variável "intPosicaoEspaco" pode ficar NEGATIVA:

    If intPosicaoEspaco <= 0 Then Exit While
    []'s,
    Fabio I.
    terça-feira, 14 de agosto de 2018 15:47
  • Ok Fabio, alterado. Obrigado mais uma vez ;)
    terça-feira, 14 de agosto de 2018 18:15