Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Prica

[Resolvido] Auto-Size font em textbox

Mensagens Recomendadas

Prica

Boas,

Queria saber alguma maneira, alguma dica para eu conseguir colocar um texto dentro de uma textbox a mudar o seu tamanho assim que a textbox tiver "cheia", mas sem alterar o tamanho da textbox... eu já encontrei alguns topicos em varios foruns mas o textobox mudava de tamanho! Alguem consegue ajudar-me?

Cumprimentos,

Paulo (Prica)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ribeiro55

Deves primeiro analisar o comprimento da string desenhada, usando por exemplo os métodos da GDI como o MeasureString.

Com esse comprimento aplicas lógica ao tamanho da font em relação à diferença do comprimento da textbox com o comprimento da string.

Outro aspecto importante é que a textbox deve estar configurada sem AutoSize, para não mudar de altura com o tamanho da font.

Usa o MultiLine = True para resolver automaticamente o deslocamento da esquerda.

Um exemplo básico:

    Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged
       Dim TamanhoNormal = 16.0F
       Dim MargemSuperior = 10.0F
       Dim MargemInferior = 20.0F
       Dim tb As TextBox = DirectCast(sender, TextBox)
       Dim g As Graphics = tb.CreateGraphics
       Dim s As SizeF = g.MeasureString(tb.Text, tb.Font, Integer.MaxValue)

       If s.Width >= (tb.Width - MargemSuperior) Then
           While s.Width > (tb.Width - MargemSuperior) And tb.Font.Size > 1
               tb.Font = New Font(tb.Font.FontFamily, tb.Font.Size - 0.5F)
               s = g.MeasureString(tb.Text, tb.Font, Integer.MaxValue)
           End While
       ElseIf s.Width < (tb.Width - MargemInferior) And tb.Font.Size < TamanhoNormal Then
           tb.Font = New Font(tb.Font.FontFamily, tb.Font.Size + 0.5F)
       End If

       If tb.Font.Size > TamanhoNormal Then tb.Font = New Font(tb.Font.FontFamily, TamanhoNormal)
   End Sub


   Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
       TextBox1.Multiline = True
       TextBox1.Height = 30
   End Sub

  • Voto 1

Sérgio Ribeiro


"Great coders aren't born. They're compiled and released"
"Expert coders do not need a keyboard. They just throw magnets at the RAM chips"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.