Naftali 0 Denunciar post Postado Junho 22, 2006 Pessoal, gostaria de saber se tem como contar quantas linhas tem no label, se tiver vai me ajudar muito.Por exemplo, tenho um texto.bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla E gostaria que ao verificar me retornasse 5. Quantidade de linhas.Tem como? Compartilhar este post Link para o post Compartilhar em outros sites
eriva_br 7 Denunciar post Postado Junho 22, 2006 falai Naftali, uma forma seria assim: Dim x, i As Integer i = 0 x = 0 While x <> -1 x = Me.lblContaLinhas.Text.IndexOf(vbNewLine, x) If (x <> -1) Then x += 1 i += 1 End If End While MessageBox.Show("numero de linhas --> " & i) obs.: caso descobrir uma forma mais simples posta ae t+ Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Junho 22, 2006 Assim: MessageBox.Show("Quantidade de linhas: " & Label1.Text.Split(vbCrLf).Length.ToString()) Onde "Label1" é a label em questão. Abraços, Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites
Naftali 0 Denunciar post Postado Junho 23, 2006 eriva_br, tentei a sua lógica, mas só retorna 0. E a do Graymalkin só me retorna 1, só foi me retornar 2 com um texto grande...Não tem nenhuma outra forma? Compartilhar este post Link para o post Compartilhar em outros sites
eriva_br 7 Denunciar post Postado Junho 23, 2006 aqui funcionou com as duas dicas, apesar q fiz usando o vb2005qual o texto que você está analisando? Compartilhar este post Link para o post Compartilhar em outros sites
Naftali 0 Denunciar post Postado Junho 23, 2006 Estava usando uma série de As, ai ele quebra a linha sozinho, mas isso era só pra teste, o que vai ser contado são pequenos textos.AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIsso...Testei agora com um texto mesmo, e maior. Mas mesmo assim não contou nada... Compartilhar este post Link para o post Compartilhar em outros sites
eriva_br 7 Denunciar post Postado Junho 23, 2006 como está a propriedade AutoSize, se estiver false, muda pra true, pois se estiver false, conforme vai digitando varios 'As' ele vai pulando a linha automaticamente, mas isso não é um ENTER e sim uma "caida"..rsrs pra ficar com ENTER (pulo de linha) clica no combo que fica do lado da propriedade Text, vai abrir uma caixa pra você digitar o texto e te dar a possibilidade de dar um ENTER REAL veja: t+ Compartilhar este post Link para o post Compartilhar em outros sites
Naftali 0 Denunciar post Postado Junho 24, 2006 Então, mas eu não posso deixar a propriedade como autosize, pq senão ele não vai pular linhas (já tentei), e sim deixar o label mais largo...Eu estou deixando o label com o tamanho fixo. E nele, verificar a quantidade de linhas... Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Junho 24, 2006 Então, no texto, fisicamente, *não* existem quebras-de-linha? Se for o caso, você vai precisar saber o tamanho, em pixels, do texto todo e dividir pela largura, também em pixels, da label.Abraços,Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites
Naftali 0 Denunciar post Postado Junho 24, 2006 Ah tah... Então, mas saber a largura do label em pixels é fácil, mas e pra saber o tamanho do texto em pixels? Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Junho 24, 2006 No VB6 eu fazia isso (obter a largura em pixels de um texto) com a função GetTextExtentPoint32() da API Win32. É bem provável que ainda seja possível fazer o mesmo no VB.NET. A declaração dela você encontra no API-Guide: http://www.allapi.net/ ou http://www.mentalis.org/ Abraços, Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites
Naftali 0 Denunciar post Postado Junho 24, 2006 Eu tentei mas não deu certo, procurei lá mas não funcionou, usei a ferramenta pra transformar o código de VB6 pra .NET, mas ele não reconheceu... Bom, vou fazer como tinha imaginado de princípio, pegar mais ou menos quantos caracteres têm por linha, e então separar na mão.Mas valeu de qualquer forma... Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Junho 24, 2006 Aqui funcionou. Eu declarei o seguinte: Public Structure POINTAPI Dim X As Integer Dim Y As Integer End Structure Private Declare Auto Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As IntPtr, ByVal lpsz As String, ByVal cbString As Integer, ByRef lpSize As POINTAPI) As Boolean Depois utilizei ela assim: Dim tam1, tam2 As POINTAPI Dim s1 As String = "W" Dim s2 As String = "llll" GetTextExtentPoint32(Me.CreateGraphics().GetHdc(), s1, s1.Length, tam1) GetTextExtentPoint32(Me.CreateGraphics().GetHdc(), s2, s2.Length, tam2) Me.CreateGraphics().DrawString(String.Format("{0} = Largura: {1}", s1, tam1.X), Me.Font, Brushes.Black, 0, 0) Me.CreateGraphics().DrawString(String.Format("{0} = Largura: {1}", s2, tam2.X), Me.Font, Brushes.Black, 0, 20) Certo? ;) Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites
Naftali 0 Denunciar post Postado Junho 27, 2006 Tudo bem, mas onde que isso me retorna algo? Não consegui entender direito...Fora que as vezes retorna isso:An unhandled exception of type 'System.InvalidOperationException' occurred in system.drawing.dllAdditional information: Objeto está sendo usado em outro lugar.Acredito que seja pq estava redimensionando o label, justamente por isso que queria saber quantas linhas também, pra fazer uma pequena animação, diminuindo, aumentando, usando timer... Estou fazendo isso pela quantidade de caracteres, mas é impreciso, por isso queria contar as linhas... Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Junho 27, 2006 Tudo bem, mas onde que isso me retorna algo? Não consegui entender direito...Os valores que você quer estão em tam1.X e tam2.X, que são as respectivas larguras dos textos "W" e "llll". No caso, eu coloquei os textos no próprio código, mas bastaria aplicar a mesma idéia ao texto de uma label.Abraços,Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites
Naftali 0 Denunciar post Postado Junho 27, 2006 Consegui, mas o problema agora é que depois de um tempo rodando ele me retorna o erro que citei antes... Não, tem como evitar isso? Tentei dar um resume next, mas mesmo assim, continua dando erro... Compartilhar este post Link para o post Compartilhar em outros sites
Graymalkin 0 Denunciar post Postado Julho 1, 2006 Você utiliza essa função constantemente? Ou seja, faz várias chamadas sucessivas a ela?Abraços,Graymalkin Compartilhar este post Link para o post Compartilhar em outros sites