Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

RitaAndrade

Guardar formatação de texto de uma Rich TextBox

Recommended Posts

RitaAndrade

Boa noite :P

Ando com um problema, tenho que guardar pequenos textos com algumas palavras em Italico.

Primeiro problema:

Nao consigo meter a opçao italico activa a partir dai tudo que for escrito ele definir como italico.

So seleccionando a palavra é q ele altera.

RichTextBox.SelectionFont = New Font(RichTextBox.Font, FontStyle.Italic)

Segundo problema:

Quando guardo essa informação o itálico desaparece.

Desde já obrigada pela atençao...

Cumps.

Rita Andrade

Share this post


Link to post
Share on other sites
ribeiro55

Olá Rita.

Presumo que tenhas uma checkbox ou um controlo de estado semelhante para indicar se queres itálico ou não.

Basta reforçar esse estado a cada mudança de selecção (que corresponde também à mudança de posição de cursor).

Isso acontece no evento "Selectionchanged". Por exemplo:

    Private Sub RichTextBox1_Selectionchanged(sender As Object, e As EventArgs) Handles RichTextBox1.Selectionchanged
       With RichTextBox1
           If CheckBox1.Checked Then
               .SelectionFont = New Font(.Font, FontStyle.Italic)
           Else
               .SelectionFont = New Font(.Font, FontStyle.Regular)
           End If
       End With
   End Sub

O segundo ponto é fácil de resolver.

Estás a utilizar o valor da propriedade "Text" para gravar.

Basta passares a utilizar o valor da propriedade "Rtf", que incluí o texto e todos os códigos RichText para a formatação.

  • Vote 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"

Share this post


Link to post
Share on other sites
RitaAndrade

Tenho outros problema problemas :(

1º - Ao guardar na base de dados com o richtextbox.Rtf, dá erro e não guarda...

2º- Ao imprimir o conteúdo da richtextbox.Rtf aparecem algumas coisas indesejáveis, por exemplo, {\rtf1\ansi\ansicpg1252\deff0...} e no final \par} e não imprime em italico...

:'(

Share this post


Link to post
Share on other sites
ribeiro55

Olá Rita,

1º Porque existem caracteres que têm de ser "escaped" primeiro. Depende um bocadito da DBMS que estás a usar. Qual é?

2º Imprimir com o formato é um tanto chato. A composição via GDI poderia tornar-se complexa e a volta que existe para estender uma richtextbox com essa capacidade também não lhe fica atrás. De qualquer forma, não perdes muito em espreitar http://msdn.microsoft.com/en-us/library/ms996492.aspx.

Um workaround que podes fazer, é abrir o documento automáticamente no wordpad, a partir da tua aplicação. Assim, consegues passar o formato e o WordPad que se encarregue de imprimir :)

Edited by ribeiro55

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"

Share this post


Link to post
Share on other sites
ribeiro55

Conseques interceptar a query que estás a usar para fazer o insert na base de dados?

Estou em crer que não precisas de fazer escape de slashes em MSSQL, por isso o problema deve ser outro.


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"

Share this post


Link to post
Share on other sites
ribeiro55

Vamos por partes.

Como é que a fazes? Ou melhor, como é que estás a gravar para a base de dados?


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"

Share this post


Link to post
Share on other sites
RitaAndrade

é ao executar isto que dá erro, mas s meter infoClinicasRichTextBox.text funciona

resp = ExecutarNonQuerySQL("EXEC sp_actualizar_RELATORIOANALISE " &
                        "@vet=" & idVETERINARIO & ", @infoclinicas='" & infoClinicasRichTextBox.Rtf & " ' ")
    If resp = 1 Then
        MsgBox("Relatório nº " & numAnTextBox.Text & " guardado com sucesso.", vbInformation, "Guardar relatório")
    Else
        MsgBox("Houve erro ao guardar o relatório.", vbCritical, "Erro ao guardar relatório")
    End If

Procedimento em SQLServer

CREATE PROCEDURE sp_actualizar_RELATORIOANALISE
@vet int,
@infoclinicas text
AS
UPDATE RELATORIO
SET
VETERINARIO=@vet,
INFORCLINICA=@infoclinicas
WHERE IDRELATORIO=@id
GO

Edited by ribeiro55

Share this post


Link to post
Share on other sites
ribeiro55

Para poder analisar melhor, coloca a seguinte linha antes do If resp = 1 Then:

Clipboard.SetText("EXEC sp_actualizar_RELATORIOANALISE " &
                        "@vet=" & idVETERINARIO & ", @infoclinicas='" & infoClinicasRichTextBox.Rtf & " ' ")

Executa até dar erro e cola o texto aqui para vermos.

Clipboard.SetText vai colocar o comando na área de transferência (equivalente a Ctrl+C).

Esse texto que vais colcar é o comando SQL.

Com isso aqui, conseguimos identificar melhor o caractere a precisar de ser escaped, no seu contexto.

Também podia ajudar identificares o erro que te dá. Deverás apanhar a excepção que está provavelmente a ser tratada no método ExecutarNonQuerySQL.

Enquanto isso, seria também boa ideia dares uma vista de olhos em parâmetros SQL.

Procura por a Wiki da comunidade.

Edited by ribeiro55

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"

Share this post


Link to post
Share on other sites
RitaAndrade

EXEC sp_actualizar_RELATORIOANALISE @vet=1, @infoclinicas='{\rtf1\ansi\ansicpg1252\deff0\deflang2070{\fonttbl{\f0\fnil\fcharset0 Arial;}}

\viewkind4\uc1\pard\fs20 Ola sou a \i Rita Andrade\i0 ... \par

}'

Share this post


Link to post
Share on other sites
ribeiro55

De facto, não há nada que possa bater com o comando. Algo assim deveria funcionar.

Procura dentro do método ExecutarNonQuerySQL o ponto em que executas o comando. Deverá lançar uma excepção.

Faz step-debug se necessário.


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"

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.