Usuário com melhor resposta
Conteúdo de um tooltip muito longo

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.
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.
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.NEThttps://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
-
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.
-
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. -
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. :)
-
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. -