Discussion:
RichTextBox tabulatorische Formatierung
(zu alt für eine Antwort)
Sam Gasser
2006-04-20 12:12:15 UTC
Permalink
Hallo NG,

Ich hab widermal ein mittelgrosses und ein klitzekleines Problemchen
mit der RichTextBox.
Das mittlere: Ich möchte eine Zeile formatieren mit "\t", das Problem
ist aber, je nach Textlänge vor dem "\t" verschiebt sich der Text nach
dem "\t". Meine Frage wäre jetzt. Wie kann ich das verhindert, resp.
wie kann ich garantieren, dass die Tabulatoren immer an der selben
Stelle sind, sodass ich eine tabellarische Darstellung aufstellen kann?
Oder kann man sogar Tabellen in der RichTextBox erstellen?

kleineres Problem: ist es irgendwie möglich den Hintergrund des
selektierten Textes verändern?
die Text Farbe weiss ich wies geht, würde aber lieber die
Hintergrundfarbe des Textes ändern (Highlighting Effekt)

Danke im Voraus

Gruss
Sams
Frank Dzaebel
2006-04-20 16:57:14 UTC
Permalink
Hallo Sam,
Post by Sam Gasser
Das mittlere: Ich möchte eine Zeile formatieren mit "\t", das Problem
ist aber, je nach Textlänge vor dem "\t" verschiebt sich der Text nach
dem "\t". Meine Frage wäre jetzt. Wie kann ich das verhindert, resp.
wie kann ich garantieren, dass die Tabulatoren immer an der selben
Stelle sind, sodass ich eine tabellarische Darstellung aufstellen
kann? Oder kann man sogar Tabellen in der RichTextBox erstellen?
RTF kann Tabellen. Schau mal in die Spec.
Du kannst mal einen Ausschnitt aus einer
Excel-Tabelle in ein Wordpad pasten.
Du nimmst das RTF und kannst nutzen.

http://groups.google.de/group/microsoft.public.de.german.entwickler.dotnet.csharp/msg/7127cdbf1cec9dee
http://geekswithblogs.net/pvidler/archive/2003/10/14/182.aspx


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Sam Gasser
2006-04-21 09:20:55 UTC
Permalink
Hallo Frank,
Post by Frank Dzaebel
RTF kann Tabellen. Schau mal in die Spec.
Du kannst mal einen Ausschnitt aus einer
Excel-Tabelle in ein Wordpad pasten.
Du nimmst das RTF und kannst nutzen.
Das tönt irgendwie nach einem gebastel... :( naja.. ich werd ne
lösung finden.

Kann mir jemand sagen, wieso das die farblich geänderte Textstellen
wieder verschwinden, sobal ich weiter Text in die RTB schreibe? Wieso
geht zum beispiel sowas nicht?`

for(int i = 0; i < 10; i++)
{
this.richTextBox1.Text += "ich bin der "+i+". Test.";
this.richTextBox1.Select(this.richTextBox.TextLenght-5,4);
this.richTextBox1.SelectionColor = Color.Blue;
}

Des sollte ja eigentlich zehn mal den Teil "Test" blau einfärben. Tut
es aber nicht. Es färbt genau den letzten "Test" blau ein, die andern
bleiben schwarz.

Gruss
Samuel
Herfried K. Wagner [MVP]
2006-04-21 09:42:56 UTC
Permalink
Hallo Sam!
Post by Sam Gasser
Post by Frank Dzaebel
RTF kann Tabellen. Schau mal in die Spec.
Du kannst mal einen Ausschnitt aus einer
Excel-Tabelle in ein Wordpad pasten.
Du nimmst das RTF und kannst nutzen.
Das Problem hiermit ist, dass dies die RichTextBox wohl nicht unterstützt.
Post by Sam Gasser
Kann mir jemand sagen, wieso das die farblich geänderte Textstellen
wieder verschwinden, sobal ich weiter Text in die RTB schreibe? Wieso
geht zum beispiel sowas nicht?`
for(int i = 0; i < 10; i++)
{
this.richTextBox1.Text += "ich bin der "+i+". Test.";
Hier holst du dir den unformatierten Text und weist ihn anschliessend
verändert wieder zu. Dabei feht die Formatierung verloren. Stattdessen
kannst du die Einfügemarke mittels der Methode 'Select' an die
Einfügeposition setzen und den einzufügenden Text der Eigenschaft
'SelectionText' zuweisen.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
Sam Gasser
2006-04-21 10:05:19 UTC
Permalink
Hallo Herfried,
Stattdessen kannst du die Einfügemarke mittels der Methode 'Select' an die
Einfügeposition setzen und den einzufügenden Text der Eigenschaft
'SelectionText' zuweisen.
Ich hab nur die Eigenschaft 'SelectedText', geht aber auch so =)
Was jetzt aber dafür wieder problematisch wird ist, dass die RTB nun
so die "\t" und "\n" nicht mehr erkannt sprich ich hab jetzt einfach
einen Kettensatz.
Post by Frank Dzaebel
RTF kann Tabellen. Schau mal in die Spec.
Du kannst mal einen Ausschnitt aus einer
Excel-Tabelle in ein Wordpad pasten.
Du nimmst das RTF und kannst nutzen.
Das Problem hiermit ist, dass dies die RichTextBox wohl nicht unterstützt.
Hättest du dann eine Lösung, wie ich das Problem umgehen könnte?
Dynamische Formatierung, so änhnlich wie im Word mit den
Tabulatormarken? Ich steh das völlig an..

Gruss
Samuel
Sam Gasser
2006-04-21 11:08:42 UTC
Permalink
Hallo Frank,
Post by Frank Dzaebel
Zwar kann RTF Tabellen und die werden auch
mit festem Abstand angezeigt, aber die Überschneidung
musst Du selber über MeasureString herausfiltern.
Überschneidung? Den RTF-Code der Tabelle einfügen scheint ja nicht so
schwierig zu sein, aber wie füll ich dann diese Zellen mit dynamischen
Werten? Kann ich da geich wie beim String
"blabla"+this.eineVariable+"blabla" unterbrechen?
Post by Frank Dzaebel
Musst Du auch Editieren können? Sonst wäre
ja das WebBrowser Control angemessen!
Hast Du .NET 2.0?
Ne ich arbeite mit .Net Framework 1.1 und VS.NET 2003. Wie gesagt ich
muss insofern editieren können, das ich meine variablen in die Zellen
schreiben kann. Ansonsten müsste man vielleicht noch die Spaltenbreite
anpassen und die Zelle farbig hinterlegen können.

Gruss
Samuel
Frank Dzaebel
2006-04-21 12:28:17 UTC
Permalink
Hallo Sam,

huch? Da bist Du wohl beim Posten in der
Ziele verrutscht.
Post by Sam Gasser
Post by Frank Dzaebel
Zwar kann RTF Tabellen und die werden auch
mit festem Abstand angezeigt, aber die Überschneidung
musst Du selber über MeasureString herausfiltern.
Überschneidung?
Na, das was zu lang ist innerhalb einer Zelle.
Die RichTextBox unterstützt den automatischen
Umbruch dort nicht.
Post by Sam Gasser
muss insofern editieren können, das ich meine variablen in die Zellen
schreiben kann. Ansonsten müsste man vielleicht noch die Spaltenbreite
anpassen und die Zelle farbig hinterlegen können.
ok, dann spricht IMHO nichts gegen ein WebBrowser Control.
http://www.codeproject.com/cs/miscctrl/WebBrowserEx.asp
Eh ich aber gross aushole und Dir beschreibe, wie
das funktioniert, würde ich kurz wissen, ob Du das überhaupt möchtest?


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Sam Gasser
2006-04-21 12:54:12 UTC
Permalink
Hallo Frank
Post by Frank Dzaebel
huch? Da bist Du wohl beim Posten in der
Ziele verrutscht.
Was wie wo?
Post by Frank Dzaebel
Eh ich aber gross aushole und Dir beschreibe, wie
das funktioniert, würde ich kurz wissen, ob Du das überhaupt möchtest?
Ich würde mal sagen ich sei dem nicht abgeneigt, müsste aber noch ein
bisschen mehr über dieses WebBrowser Control wissen.
Ich brauche es für:
- Report reinschreiben (formatiert: tabelle od. tabs, farbiger
hintergrund)
- Report wenn möglich in HTML File schreiben (geht warsch. mit
WebBrowser besser, mit RTB geht es ja glaub ich nicht, hab ich gelesen)
- Link zu einem anderen File (XML) erstellen mit arbitrary text, also
nicht "C:/Programme/asd.xml" sondern "File"

Wär das möglich? Ist dieser WebBrowser einfach zu handeln?

Gruss
Sam
Frank Dzaebel
2006-04-21 13:07:33 UTC
Permalink
Hallo Sam,
Post by Sam Gasser
Post by Frank Dzaebel
huch? Da bist Du wohl beim Posten in der
Ziele verrutscht.
Was wie wo?
Bei mir erscheint Dein Posting hinter Deinem.
Und nicht hinter meinem. Aber egal.
Post by Sam Gasser
Ich würde mal sagen ich sei dem nicht abgeneigt,
müsste aber noch ein bisschen mehr über
dieses WebBrowser Control wissen.
Das, was Du brauchst wäre damit IMHO einfacher.
Ich werd' Dir mal ein kleines Progrämmchen
basteln, was eine farbige Tabelle als HTML unter
.NET 1.1 C# darstellt. Schätze etwa eine Bildschirmseite.
Post by Sam Gasser
- Report wenn möglich in HTML File schreiben (geht warsch. mit
WebBrowser besser, mit RTB geht es ja glaub ich nicht, hab ich gelesen)
Geht schon, kostet nur was :(
Post by Sam Gasser
Wär das möglich? Ist dieser WebBrowser einfach zu handeln?
IMHO schon. Natürlich ein paar kleine Kniffe dabei.


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Sam Gasser
2006-04-21 15:31:43 UTC
Permalink
Hallo Frank,
Post by Frank Dzaebel
Ich werd' Dir mal ein kleines Progrämmchen
basteln, was eine farbige Tabelle als HTML unter
.NET 1.1 C# darstellt. Schätze etwa eine Bildschirmseite.
Das wär sicher hilfreich fürs Verständnis.. Denn viel Zeit mit
Recherchieren darf ich nicht mehr verbringen.. die Zeit drängt langsam
immer mehr ;o)
2 Wochen, dann muss des Programm stehen.. *schluck* hehe..

BTW: Ich seh nirgends, das ich meinen eigenen Text gepostet hab...

schönes wochenende

kindliche regardierungen
aka kind regards
Sam
Frank Dzaebel
2006-04-21 17:19:58 UTC
Permalink
Hallo Sam,
Post by Sam Gasser
Ich werd' Dir mal ein kleines Progrämmchen basteln,
was eine farbige Tabelle als HTML unter
.NET 1.1 C# darstellt. Schätze etwa eine Bildschirmseite.
Das wär sicher hilfreich fürs Verständnis..
[Eigenes HTML im WebBrowser einfügen]
http://dzaebel.net/MshtmlTab.htm
Post by Sam Gasser
kindliche regardierungen
Du bist willk(c)ommen


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Sam Gasser
2006-04-24 08:36:30 UTC
Permalink
Hallo Frank,

Vielen Dank für das Beispiel. Sieht eigentlich gar nicht schlecht aus,
im Vergleich zur RTB. Ich hab jetzt mal angefangen meinen eigenen
WebBrowser zu implementieren, krieg aber immer eine
NullReferenceException "Object reference not set to an instance of an
object" und zwar bei der Zeile "doc.clear();" also irgendwas stimmt mit
dem "IHTMLDocument2" nicht.

Hab gelesen, dass die HTMLDocument Klasse nur .NET Framework 2.0
unterstützt, ich aber arbeite mit dem Framework 1.1
Kann das ein Grund sein?

Gruss
Sam
Herfried K. Wagner [MVP]
2006-04-24 10:09:42 UTC
Permalink
Hallo Sam!
Post by Sam Gasser
Vielen Dank für das Beispiel. Sieht eigentlich gar nicht schlecht aus,
im Vergleich zur RTB. Ich hab jetzt mal angefangen meinen eigenen
WebBrowser zu implementieren, krieg aber immer eine
NullReferenceException "Object reference not set to an instance of an
object" und zwar bei der Zeile "doc.clear();" also irgendwas stimmt mit
dem "IHTMLDocument2" nicht.
Hast du auch einen COM-Verweis auf MSHTML hinzugefügt?
Post by Sam Gasser
Hab gelesen, dass die HTMLDocument Klasse nur .NET Framework 2.0
unterstützt, ich aber arbeite mit dem Framework 1.1
Kann das ein Grund sein?
Nein, da das Beispiel von Frank MSHTML und nicht die Klasse 'HtmlDocument'
aus dem .NET Framework benutzt.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
Frank Dzaebel
2006-04-24 10:12:28 UTC
Permalink
Hallo Sam,
Post by Sam Gasser
Vielen Dank für das Beispiel. Sieht eigentlich gar nicht schlecht aus,
im Vergleich zur RTB. Ich hab jetzt mal angefangen meinen eigenen
WebBrowser zu implementieren, krieg aber immer eine
NullReferenceException "Object reference not set to an instance of an
object" und zwar bei der Zeile "doc.clear();" also irgendwas stimmt mit
dem "IHTMLDocument2" nicht.
Läuft denn *mein* Projekt auf Deinem Rechner?
Bei mir läuft es unter .NET 1.1 / VS 2003.


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Frank Dzaebel
2006-04-24 10:25:15 UTC
Permalink
Post by Frank Dzaebel
Läuft denn *mein* Projekt auf Deinem Rechner?
Bei mir läuft es unter .NET 1.1 / VS 2003.
Wenn ja, dann füge evtl. einfach die Verweise aus
meinem Projekt auch in Deinem ein.


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Sam Gasser
2006-04-24 11:25:08 UTC
Permalink
Hallo Frank,

Ich hab den Fehler gefunden. Ich hatte im Navigate Befehl anstatt
"about:blank", "abount:blank" geschrieben. Es funktioniert alles
wunderbar. Entschuldigt den Aufruhr..
Wieder mal menschliches Versagen daran schuld =)

Ich muss sagen dieser WebBrowser passt mir gut. So einfach hätt ich
mir das nicht vorgestellt. Sogar der <hr> Befehl ist jetzt möglich
*freu*

Leider muss ich nun die generierung des Report neu konzipieren, resp.
umschreiben, hatte doch schon relativ viel programmiert. Aber es fällt
deutlich leichter mit dem Wissen, dass jene Dinge nun möglich sind,
welche in der RTB deutlich schwerer zu programmieren wären.

Vielen Dank also nochmals
Gruss
Sam

Frank Dzaebel
2006-04-21 10:03:12 UTC
Permalink
Hallo Sam,
Post by Sam Gasser
Post by Frank Dzaebel
RTF kann Tabellen. Schau mal in die Spec.
Du kannst mal einen Ausschnitt aus einer
Excel-Tabelle in ein Wordpad pasten.
Du nimmst das RTF und kannst nutzen.
Das tönt irgendwie nach einem gebastel... :(
naja.. ich werd ne lösung finden.
Ist halt tiefstes RTF nach Spec.
Aber, so schlimm ist das nicht. Einfach die RTF-
Eigenschaft setzen mit dem, was aus dem Wordpad
herauskommt.

Zwar kann RTF Tabellen und die werden auch
mit festem Abstand angezeigt, aber die Überschneidung
musst Du selber über MeasureString herausfiltern.

Musst Du auch Editieren können? Sonst wäre
ja das WebBrowser Control angemessen!
Hast Du .NET 2.0?


ciao Frank
--
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET
Herfried K. Wagner [MVP]
2006-04-21 13:16:15 UTC
Permalink
Post by Sam Gasser
Ich hab widermal ein mittelgrosses und ein klitzekleines Problemchen
mit der RichTextBox.
Das mittlere: Ich möchte eine Zeile formatieren mit "\t", das Problem
ist aber, je nach Textlänge vor dem "\t" verschiebt sich der Text nach
dem "\t". Meine Frage wäre jetzt. Wie kann ich das verhindert, resp.
wie kann ich garantieren, dass die Tabulatoren immer an der selben
Stelle sind, sodass ich eine tabellarische Darstellung aufstellen kann?
Über die Eigenschaft 'SelectionTabs' des RichTextBox-Steuerelements kannst
du die Position der Tabulatoren setzen. Wird eine ausreichende
Tabulatorbreite gesetzt und diese nicht vom dargestellten Text
überschritten, dann erscheint die Ausgabe tabellarisch.
--
M S Herfried K. Wagner
M V P <URL:http://dotnet.mvps.org/>
V B <URL:http://classicvb.org/petition/>
Loading...