Ir para o conteúdo
  • 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

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

  • 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
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...

:'(

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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 :)

Editado por 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por ribeiro55

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Editado por 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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

}'

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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"

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.