none
Alterar tamanho da fonte no RichTextBox

    Question

  • Pessoal,
    Não estou conseguindo mudar o tamanho da fonte em um RichTextBox sem perder a configurações do texto já aplicadas.

    Exemplo: Criei um texto e neste utilizei negrito em alguns lugares, itálico em outros e até sublinhado. Porém na hora que tento mudar o tamanho da fonte ele até muda, mas todos os lugares que estilo definido anteriormente se perde, ficando o texto inteiro com a novo tamanho e tudo como regular.

    Eu estou usando o código abaixo para apicar o tamanho da fonte.
    RichTextBox1.Font = New Font("Tahoma", 10)

    Não estou informando o Style justamente para não alterar, porem ele não considera vazio e aplica no texto inteiro o Style Regular.

    Fico no aguardo de qualquer ajuda.

    Croda.
    Wednesday, December 09, 2009 12:27 PM

Answers

  • Complementando outra pergunta, eu desisti de usar o componente RichTextBox. Necessito de mais funções que ele dispõe, desta forma utilizei um editor de texto via WebBrowser.

    Abaixo esta o link para o exemplo que encontrei na internet que foi de grande ajuda para a construção de um editor de texto completo.

    Desde já agradeço a ajuda.

    Att,
    Croda.
    • Marked as answer by Croda Tuesday, December 22, 2009 2:07 PM
    Tuesday, December 22, 2009 2:07 PM

All replies

  • Está faltando você selecionar o texto que você quer trocar a fonte.

    Segue um exemplo:

    RichTextBox1.SelectionStart = 0
            RichTextBox1.SelectionLength = 4
            RichTextBox1.SelectionFont = New Font("Tahoma", 10)


    Att. Alan
    Se esta resposta solucionou sua dúvida, “Marque como Resposta”
    Wednesday, December 09, 2009 12:43 PM
  • Alan,
    Eu também utilizei o SelectionFont, porem não funciona também.
    O código que passei funciona para mudar o tamanho da fonte, o que ocorre é a perca dos estilos informados no texto.
    Caso o usuário deixe um trecho em negrito, outro em itálico e depois ele queira mudar o tamanho da fonte de todo o texto ele acaba perdendo estes estilos de negrito e itálico utilizado, ficando tudo como regular (normal).

    Eu também tentei isto.
    RichTextBox1.SelectionAll
    RichTextBox1.SelectionFont = New Font("Tahoma", 10)

    Mas continua perdendo os estilos utilizados no texto.

    Não sei se estou sendo muito claro na minha dúvida?

    Desde já agradeço a ajuda.

    Att,
    Croda.
    Wednesday, December 09, 2009 1:17 PM
  • Olá Croda,

    o construtor da Classe fonte aceita mais parâmetros além de name e size, tente passar os 2 parâmetros que você deseja que seja alterado e passe o restante pegando da fonte atual.

    Ficaria assim:

    RichTextBox1.SelectionFont = New Font("Tahoma", 10, RichTextBox1.Font.Style, RichTextBox1.Font.Unit, RichTextBox1.Font.GdiCharSet, RichTextBox1.Font.GdiVerticalFont)
    Att. Alan
    Se esta resposta solucionou sua dúvida, “Marque como Resposta”
    Wednesday, December 09, 2009 1:56 PM
  • Alan,
    Obrigado pela ajuda, mas ainda não solucionou meu problema.

    O problema na Classe Font é que ela não deixa aplicar um tamanho de fonte sem alterar o Style.

    Quando eu solicito ao RichTextBox o retorno do Style para este texto (negrito itálico sublinhado ou todos juntos) ele retorna como Regular, ele não consegue diferenciar os trechos de somente negrito, itálico, sublinhado ou qualquer junção que foi feita no texto, ai quando eu aplico a nova formatação ele transforma o texto acima em (negrito itálico sublinhado ou todos juntos).

    Solução até achei uma, mas não é viável já que dependendo do texto ele demora muito. Segue código abaixo:
        Private Sub aplicaTamanhoFonte(ByRef notes As RichTextBox)
            Dim inicial As Integer
            notes.SelectAll()
            Dim total As Integer = notes.SelectionLength()
            For inicial = 0 To total
                notes.Select(inicial, 1)
                Dim estilo As FontStyle = notes.SelectionFont.Style
                notes.SelectionFont = New Font("Tahoma", 10, estilo)
            Next
        End Sub

    Você pode reparar que usei o mesmo código para aplicar a nova formatação, mas caracter a caracter para que o Style retornado seja mantido.

    Minha procura é por uma solução mais simplificada e que não tenha demora para executar uma vez que tenho na aplicação 4 RichTextBox e diversos tamanho de textos, uns de 15000 caracteres pra mais.

    Novamente agradeço a atenção.

    Att,
    Croda.
    Wednesday, December 09, 2009 2:22 PM
  • Olá Croda.

    Dei uma pesquisada aqui e acredito que sem você varrer todos os caracteres será difícil o que você está querendo. Eu desconheço outra função.

    Att. Alan.
    Se esta resposta solucionou sua dúvida, “Marque como Resposta”
    Wednesday, December 09, 2009 3:51 PM
  • Ok Alan,

    Eu também estou procurando alguma coisa do gênero, porem não encontrei nada também a respeito.
    Vou continuar na procura de alguma solução.

    Mesmo assim agradeço a ajuda.

    Att,
    Croda.
    Thursday, December 10, 2009 11:26 AM
  • Croda,

    Você conseguiu encontrar algo?

    att,

    Fernanda
    “Caso esta resposta tenha ajudado a solucionar sua dúvida, favor clicar em “Marcar como Resposta” para beneficiar outros membros da comunidade que estejam lendo este thread”.
    Friday, December 11, 2009 4:19 PM
  • Complementando outra pergunta, eu desisti de usar o componente RichTextBox. Necessito de mais funções que ele dispõe, desta forma utilizei um editor de texto via WebBrowser.

    Abaixo esta o link para o exemplo que encontrei na internet que foi de grande ajuda para a construção de um editor de texto completo.

    Desde já agradeço a ajuda.

    Att,
    Croda.
    • Marked as answer by Croda Tuesday, December 22, 2009 2:07 PM
    Tuesday, December 22, 2009 2:07 PM
  • amigo, veja se isso te ajuda:

    Dim bold, italic, under As Boolean
      Private Sub btnNegrito_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNegrito.Click
        If btnNegrito.Checked = True Then
          bold = True
        Else
          bold = False
        End If
        VerificaFormatacao()
      End Sub
    
      Private Sub btnItalico_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnItalico.Click
        If btnItalico.Checked = True Then
          italic = True
        Else
          italic = False
        End If
        VerificaFormatacao()
      End Sub
    
      Private Sub btnSublinhado_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSublinhado.Click
        If btnSublinhado.Checked = True Then
          under = True
        Else
          under = False
        End If
        VerificaFormatacao()
      End Sub
    
      Private Sub cmbTamanho_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmbTamanho.SelectedIndexChanged
        VerificaFormatacao()
        txtRecado.Focus()
      End Sub
    
      Private Sub VerificaFormatacao()
        If bold = True And italic = True And under = True Then
          txtRecado.SelectionFont = New Font(txtRecado.Font.Name, CSng(cmbTamanho.Text), FontStyle.Bold Or FontStyle.Italic Or FontStyle.Underline)
        ElseIf bold = True And italic = True And under = False Then
          txtRecado.SelectionFont = New Font(txtRecado.Font.Name, CSng(cmbTamanho.Text), FontStyle.Bold Or FontStyle.Italic)
        ElseIf bold = True And italic = False And under = True Then
          txtRecado.SelectionFont = New Font(txtRecado.Font.Name, CSng(cmbTamanho.Text), FontStyle.Bold Or FontStyle.Underline)
        ElseIf bold = True And italic = False And under = False Then
          txtRecado.SelectionFont = New Font(txtRecado.Font.Name, CSng(cmbTamanho.Text), FontStyle.Bold)
        ElseIf bold = False And italic = True And under = True Then
          txtRecado.SelectionFont = New Font(txtRecado.Font.Name, CSng(cmbTamanho.Text), FontStyle.Italic Or FontStyle.Underline)
        ElseIf bold = False And italic = True And under = False Then
          txtRecado.SelectionFont = New Font(txtRecado.Font.Name, CSng(cmbTamanho.Text), FontStyle.Italic)
        ElseIf bold = False And italic = False And under = True Then
          txtRecado.SelectionFont = New Font(txtRecado.Font.Name, CSng(cmbTamanho.Text), FontStyle.Underline)
        Else
          txtRecado.SelectionFont = New Font(txtRecado.Font.Name, CSng(cmbTamanho.Text), FontStyle.Regular)
        End If
      End Sub
    

    Tuesday, September 28, 2010 2:31 PM
  • espero ter ajudado
    Tuesday, September 28, 2010 2:36 PM