Text v Richtextboxu   zodpovězená otázka

VB.NET

Dobrý den, mam další hloupý dotaz,ale celkem to potřebuju vědět k dokončení projektu.Dělám HTML editor (funkce už mám) potřebuji vědět jak skládat text.Mám tlačítka s jednotlivými tagy.V tlačítku jsem měl původně tento kód.

dim a as string 
a = "<br>" 
richtextbox1.text = a 

bohužel po každém stisku jiného tlačítka se mi richtextbox přemazal.To jsem vyřešil takto:

dim a as string 
a = "<br>"
richtextbox1.text = richtextbox1.text + a 

Problém je ale v tom,že třeba vyvolám tag table a když chci do tagu table přidat tlačitkem tagy <td> </td> .Tak se přidají úplně nakonec za table.Skládání řetězců není moje parketa.Děkuju všem za vaše rady.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Navrhuji kompletně překopat koncept aplikace. (Já vím, nebude to snadné, ale vyplatí se to.) Použil bych třídu Xml.XmlDocument nebo XDocument k skládání HTML a v RTB bych zobrazoval jen textovou reprezentaci té třídy.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za odpověď,snad to nějak zvládnu.Alespoň si rozšířim dosavadní znalosti.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dovolím si poznamenat ještě 2 věci:

1.) Je možno použít i třídu HtmlDocument, jež je k práci s HTML přímo určena (za předpokladu, že byste použil komponentu WebBrowser (například v kombinaci s ExecCommand)).

2.) Pokud ponecháte RTB, nejspíš budete chtít, aby bylo možné zdroj psát také ručně. XmlDokument se použít i jako syntax validator, protože obsahuje proceduru, jež se pokusí vytvoři instanci ze zadaného zdroje. (XmlDocument.LoadXml) Pokud si na formulář přidáte Timer a spustíte ho každé řekněme 2 sekundy po uvolnění klapky na RTB, můžete v události Tick Timeru provést "validaci" zdroje výše zmíněným postupem a odchytit případnou chybu (Exception), jejíž vlastnost Message obsahuje popis a lokaci chyby ve zdroji. Nyní dokonce v češtině, protože v rámci pravidelných aktualizací jsme obdrželi lokalizované chybové hlášky pro FW. To by Vám mohlo velmi usnadnit práci. Přeji mnoho úspěchu.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Moc Vám děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

pokud to dělat takto, tak bych navíc raději použil Scintilu místo RTB - ta umožnuje mnohem širší možnosti formátování včetně zobrazování chyb ala visual studio nebo použití auto-completion apod. Je to skvělě v tom, že odděluje obsah od formátování a tak se s tím opravdu skvěle pracuje.

http://www.vbnet.cz/blog-clanek--213-sci...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ještě jedna maličkost. Scintilla umí HTML/XML barvit zcela automaticky, takže to nemusíte v kódu řešit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Díky za radu , ale problém je,že i když to Scintilla umí,tak já to neumím napsat.Nevíte o nějakém tutorialu jak na to ? diky.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Co znám o téhle komponentě jsem shrnul zde:

http://www.vbnet.cz/blog-clanek--213-sci...

Osobně jsem řešil stylování vlastní cestou, protože mi žádný z hotových jazyku nevyhovoval. Ale rozchodit XML/HTMl je otázkou jednoho nastavení v design módu, viz.: http://scintillanet.codeplex.com/Wiki/Vi... nebo http://scintillanet.codeplex.com/Wiki/Vi...

V kostce jde jen o to, že nastavíte pouze jazyk v properties, ktery chcete pouzivat a stylovani za vás řeší komponenta sama. Seznam jazyků: http://scintillanet.codeplex.com/Wiki/Vi...

Používám ji výhradně kvůli stylování a musím říct, že je skvělá. Umí také vyhledávat pomocí regexp, takže hledání je opravdu přímočaré.

Jen pozor, doporučuji stáhnout nejnovější verzi .NET wrapperu komponenty z tamního CVS (http://scintillanet.codeplex.com/SourceC... a zkompilovat si jí v C# Express. Opravují některé chybky, které by vás mohly zbytečně trápit.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Super,díky,moc jste mi pomohl.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Dobrý večer,dovolil bych si otázečku.Lze nějak udělat v Scintille příkaz jako je např. u Richtextboxu:

RichtTextBox1.undo 

Googlil jsem,ale všemocný rádce mi tentokrát neporadil.Za případnou radu velice děkuji.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

myslím, že tam je objekt UndoRedo a ten obsahuje metody UNDO a REDO. Ve vlastnostech lze zapnout, resp. vypnout Undo funkcnost a tak se domnivam, ze to umi.

Součástí projektu Scintilla NET (http://scintillanet.codeplex.com) je take textovy editor SCIDE postaveny prave na Scinitlla NET komponente. Kdyz nevim jak se co dela, obcas zabrousim do jejich kodu.

P.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Děkuji Vám, už jsem to nějak vyřešil.Sice to není moc programátorsky "čisté" , ale jde to :) .Scintilla je fakt super.

Přídavek:

Tak už jsem to vyřešil úplně bylo to triviální,přesně jak jste říkal.

  Scintilla1.UndoRedo.Undo()
  Scintilla1.UndoRedo.Redo()

Celkem mě štve ten čas co jsem tím zabil.Jinak ještě jednou díky.Velmi jste mi pomohl k napsání části programu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback