vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

C# Ecke
String.Format erweitern oder gar selber schreiben? 
Autor: Tomarr
Datum: 02.11.12 11:13

Hi zusammen.

Ich habe folgendes Problem. Ich möchte in verschiedenen Versionen halt formatierten Text ausgeben. Soweit so gut, geht mit String.Format auch ganz toll.

Problem dabei ist nur das mir String.Format nicht weit genug geht. Ich müsste es irgendwie erweitern mittels Vererbung, oder ich würde es auch komplett neu schreiben und in meine Klasse einbauen wenn es sein muss.

Nur leider habe ich jetzt keine Grundlage dafür gefunden wie String.Format funktioniert. MS gibt dafür ja leider den Sourcecode nicht raus. Sämtliche Google-Suchen liefen auch ins leere. Deswegen hoffe ich hier jemanden mit entsprechenden Kenntnissen zu finden.

Danke schonmal im Voraus.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: ModeratorDaveS (Moderator)
Datum: 02.11.12 20:12

.Net Code ist seit einigen Jahren verfügbar. Die String-Klasse kann aber nicht erweitert werden. Und eine neue Klasse aus dem Code zu bauen wäre unmöglich, ohne den kompletten Framework damit neu zu kompilieren. Ich verstehe nicht was an String.Format() besonders mysteriös oder schwer zu implementieren wäre. Was willst du denn so machen, konkret?

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Tomarr
Datum: 03.11.12 19:36

Das ist ne gute Frage. Wahrscheinlich bin ich eh gerade in eine Sackgasse geleufen.

Mein Ursprünglicher plan war es die aus der Richtextbox zu erben und eine Methode dazu schreiben die es per Einzeiler ermöglicht bunten Text darzustellen.


Nur mal so als Beispiel, ich weiß dass die Syntax nicht ganz hinhaut.
ColorText("Hallo dieses [Color.Red]Wort[/Color.Red] ist rot");
Oder irgendwie sowas. Nun hatte ich die Wahl das ganze per Format irgendwie umzusetzen, oder per Parse, da war ich halt noch am überlegen. Aber irgendwie habe ich gemerkt dass die Grundlage Richtextbox da vielleicht schon falsch ist.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Manfred X
Datum: 03.11.12 20:10

Hallo!

Was Du planst, hat nichts mir dem Formatieren von Zeichenfolgen oder
dem Parsen eines Objekts als Zeichenfolge zu tun, sondern es handelt
sich um das EINFÜGEN von Textattributen.

Für die Darstellung von buntem Text benötigst Du eine geeignete Infrastruktur
(RTF-Control, Browser o.ä.). Die dabei jeweils VORGEGEBENEN Attribute des
dabei eingesetzten Codeschemas (RTF, HTML) müssen in Deinem Programm-Code
zu den anzuzeigenden Zeichenfolgen hinzugefügt werden.

Beitrag wurde zuletzt am 03.11.12 um 20:16:30 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Tomarr
Datum: 03.11.12 20:23

Ja ok, das sehe ich ja ein. Nur, ich muss die Atribute doch irgendwie aus dem Text herausparsen, oder denke ich da zu kompliziert?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Manfred X
Datum: 03.11.12 21:16

Hallo!

Was genau möchtest Du erreichen?
Hier ein kleines Beispiel ....
private void DemoRTF()
{
	RichTextBox rc = new RichTextBox { Parent = this };
 
	//Text ohne Attribute zuweisen
	rc.Text = "Dieses Wort ist rot und dieses Wort ist gelb.";
 
	//Worte färben (Attribute ergänzen)
	rc.SelectionStart = rc.Text.IndexOf("rot");
	rc.SelectionLength = "rot".Length;
	rc.SelectionColor = Color.Red;
 
	rc.SelectionStart = rc.Text.IndexOf("gelb");
	rc.SelectionLength = "gelb".Length;
	rc.SelectionColor = Color.Yellow;
 
	//Text inclusive aller RTF-Attribute abfragen
	string rtf_text = rc.Rtf;
}
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Tomarr
Datum: 03.11.12 22:45

Richtig, nur halt nicht so kompliziert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Tomarr
Datum: 06.11.12 15:44

Nachdem ich mich mit dem Problem etwas näher beschäftigt habe scheint es zumindest recht einfach zu sein. Ich brauch ja eigentlich nur direkt den Richtextcode zu manipulieren.

Ich habe da sogar ein paar Tutorials gefunden. Aber in der Praxis scheint es doch komplexer zu sein.

Die Tutorials funktionieren nichtmal richtig. Das Problem scheint an den Escapesequenzen zu liegen. Aber selbst wenn ich den String mit @"\cf1 blablabla \cf0" (nur als Beispiel für eine Farbänderung) erstelle und dann versuche direkt in die Richtextbox zu schreiben verschluckt er einen großen Teil des Strings.

Z.B. habe ich mich entschlossen der Einfachheithalber eine Feste Farbtabelle zu benutzen mit Schwarz, Rot, Grün, Blau, Gelb und Weiß.

Der String sieht dazu folgendermaßen aus.

@"{\Colortbl;\red0\green0\blue0;\red255\green0\blue0;\red0\green255\blue0;\red" & _
  "\green0\blue255;\red255\green255\blue0;\red255\green255\blue255;}"
Wenn ich die Original Colortbl damit überschreiben will kommt aber nur

\Colortbl;\red255\green255\blue255;
in der Richtextbox an.

Und das ist ebenfalls so wenn ich zum Beispiel einen String parse der wie folgt aussieht

"[Yellow]Gelb[/]"

In meinem Code ersetze ich dann durch Replace [Yellow] duch "\\cf6" (Gelb halt) und [/] durch "\\cf0" (Standardfarbe)

[Yellow] wird auch ersetzt und im RTF hinterlegt, aber [/] bleibt im Text einfach [/]

Das verwirrt mich ein wenig da es ja die gleiche Routine ist die es umwandeln soll.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Manfred X
Datum: 06.11.12 18:41

Hallo!

Du "parst" nicht korrekt!
Nutze dafür eine der verfügbaren Net-Bibliotheken, z.B.
http://www.codeproject.com/Articles/11306/NRTFTree-A-class-library-for-RTF-processing-in-C
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Tomarr
Datum: 06.11.12 19:12

Jap, das Beispiel habe ich auch gesehen.

Nur wenn ich mir den Sourccode runter lade sind die ganzen Anmerkungen auf Spanisch. Ich habe mich ja schon soweit dran gewöhnt das ich englisch beherschen muss um Programmieren zu lernen, aber Spanisch?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Manfred X
Datum: 06.11.12 19:37

Es gibt doch den Google-Übersetzer.

Und dieser Tipp hat nicht funktioniert?
http://www.codeproject.com/Articles/15038/C-Formatting-Text-in-a-RichTextBox-by-Parsing-the
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Tomarr
Datum: 28.11.12 18:50

Ich glaube ich weiß inzwischen wo mein Fehler liegt.

Das scheint unter eine Kategorie zu fallen die ich am objektorientierten Programmieren noch nicht so ganz verstanden habe.

Ich habe ja eine Klasse geschreiben die die RichtextBox geerbt hat.

Dieser Klasse habe ich einige Methoden hinzugefügt die ich halt benötige, was auch gut funktioniert.

Aber das Problem mit der Farbe scheint zu sein das eine direkte Manipulation des RTF-Codes aus der eigenen Klasse heraus nicht funktioniert. Denn jedesmal wenn ich weiteren Text hinzufüge wird die direkte Manipulation des RTF-Codes durch den ursprünglichen Code wieder zurückgesetzt.

Ich könnte jetzt natürlich intern eine Array erezugen die den gesamten manipulierten RTF-Code inkl. Inhalt speichert und bei jeder Änderung dann komplett löscht und neu schreibt. Das dumme ist nur dass das auf dauer, bei sehr vielen Zeilen, wiederrum sehr langsam wird.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: ModeratorFZelle (Moderator)
Datum: 30.11.12 18:21

Du willst also "nur" eine art Syntaxhilighting machen?

Da gibt es doch schon haufenweise fertige und kostenlose Komponenten für.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Tomarr
Datum: 15.12.12 00:29

Ja, aber es geht mir ja ums Grundlagen lernen. Am besten wie man von Grund auf so eine Corntrol wie die RTB schreibt. Weißt du, nicht so fertige Dinger, sondern mal so richtig bei Null beginnen und dann auch verstehen was dahinter passiert. Warum es passiert usw.

So Oberflächlich habe ich mit C# ja schon einiges gemacht. Und es kommt ja auch sehr viel mit Visual Studio mit, da kann man ja schon sehr viel machen ohne das man da jetzt ins innere eingreift. Aber meine Neugier überwiegt da natürlich um einiges. Ich will halt mehr lernen als nur ein paar If... else ... Anweisungen hinter einen Button oder Timer zu schreiben.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: ModeratorFZelle (Moderator)
Datum: 20.12.12 09:13

Dann fängst du das aber eher suboptimal an.
Du denkst dir irgendwas aus und schaust dann wie du das genau so hinbekommst.

Besser wäre es mal die Grundlagen überhaupt zu erlesen, nicht nur das bisschen .NET sondern OOP und Pattern.
Dann sieht man manchmal das es einen anderen, einfacheren und sogar schnelleren weg gibt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Tomarr
Datum: 22.12.12 03:37

Die Grundlagen von .NET und OOP habe ich ja schon erlesen, und auch einigermaßen verstanden. Zwar finde ich auch da immer wieder etwas zum optimieren, aber als Hobbyprogrammierer ist es ja normal das noch vor der Alpha erstmal die "funktioniert erstmal" Version raus kommt.

Aber wie gesagt, inzwischen reicht es bei mir nicht mehr OOP mäßig irgendwas zu erben oder zu erweitern. Damit komme ich nicht weit genug.

Für vieles könnte ich vielleicht noch die Lösung in WPF suchen, weil damit kann man ja Quasi seine Useroberfläche prima zusammenmixen, so das auch die Controls ihre Eigenschaften vereinen. Aber erstens geht auch da nicht alles was ich vorhabe, und zweitens stehe ich mit WPF noch extrem auf Kriegsfuß. Diese ganze sache mit dem XAML und Bindingkram finde ich irgendwie nicht so schön, auch wenn ich mich früher oder später damit wohl arangieren muss.

Aber um mal auf die Ursprungsfrage zurück zu kommen. Momentan habe ich ne Menge Ideen die auf diese Frage aufbauen. Von daher ist das nicht nur eine Idee die ich umsetzen will, sie würde mich auch eine ganze Menge weiter bringen, was mit den Hauseigenen Controls nunmal leider nicht so funktioniert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Manfred X
Datum: 22.12.12 11:57

Hallo!

Ich habe den Eindruck, Du hast nicht verstanden, was FZelle
Dir geschrieben hat.

Die OOP-Strategien umfassen wesentlich mehr Gesichtspunkte als
die Vererbung/Erweiterung von Klassen
(Strukturierung, Wiederverwendung von Code).

Databinding ist kein "Kram", sondern eine wichtige Voraussetzung
für die systematische Trennung der verschiedenen Operationsebenen.
Damit solltest Du Dich nicht "arrangieren", sondern lernen, wie es
effizient und sinnvoll zu NUTZEN ist.

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: String.Format erweitern oder gar selber schreiben? 
Autor: Tomarr
Datum: 22.12.12 13:55

Na dann mal her mit Quellen zum weiter lernen. ^^
Weil eines meiner Probleme ist ja das ich ne Menge Literatur habe, von Beginner bis Fortgeschritten. Aber auch die Fortgeschrittenenliteratur bringt jetzt nicht wirklich viel neues ans Tageslicht. Da gibt es doch bestimmt Bücher die auch mal so richtig ins volle gehen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Grundlagen lernen ist --- Arbeit 
Autor: Manfred X
Datum: 23.12.12 12:23

Hallo!

Angesichts dessen, was Du hier gepostet hast, wird klar,
dass Du vermutlich einige Bücher durchgeblättert hast, aber
kein einziges intensiv durchgearbeitet.

Das Net-Framework bietet Dir viele Hilfsmittel, die zu nutzen
Du aber erst (teilweise mühsam) erlernen und deren zielgerechten
Gebrauch Du (an einfachen Beispielen) einüben mußt.
In der Praxis ist halt doch einiges "komplexer"

Zunächst solltest Du entscheiden, ob Du ein Hobby-Programmierer
bleiben willst, dessen Programme maximal einige Tausend Zeilen
umfassen - oder ob Du die Kompetenz entwickeln möchtest, umfangreiche
Anwendungen zu strukturieren.

Aber da für Dich ja sogar [I]"die Fortgeschrittenen-Literatur nicht
wirklich viel neues ans Tageslicht bringt"[/I]
sind meine Kenntnisse
leider keinesfalls ausreichend, um Dich unterstützen zu können.

MfG
Manfred
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grundlagen lernen ist --- Arbeit 
Autor: Tomarr
Datum: 23.12.12 20:56

Naja, vielleicht habe ich ja auch nur die falschen fortgeschrittenen Bücher gelesen. So ein Buch ist ja nunmal leider nicht ganz billig, so das ich dann auch nicht mal eben mehrer bestellen kann. Und was heißt nichts neues, das war dann auch etwas übertrieben. Einige zeigen da dann ein wenig auf wie man schön sauberen und vor allem einheitlichen Code schreibt. Ist ja auch nicht ganz unwichtig.

Aber irgendwie so die Hintergründe, frei nach dem Motto "Wie hat Microsoft das in seinem .NET gelöst", das fehlt mir ein bisschen.

Und was meine ursprüngliche Frage angeht, sicher gibt es da einige Lösungswege. Logisch. Nur die meisten beruhen darauf ein Wort erkennen, markieren und dann umfärben. Mir er4scheint das ganze ein wenig als Workarround. Offensichtlich eine akzeptierte Lösung, es gibt viele Ansätze, Tutorials und Beispiele dazu, aber irgendwie doch halbherzig wie ich finde. Deswegen währe es doch schöner wenn ich in meinem Code gleich die Zeile, bevor ich sie eintrage durch gehe und entsprechend färbe. Zumindest bei längeren Texten erscheint mir das sinnvoller. Und wenn ich mir ne eigene Picturbox, HTML-Form oder was als Textausgabe umbauen muss, sch*** egal halt.

Und der Rest der Frage war eigentlich deswegen so gestellt weil... mich hat immer die Funktion console.writeline sehr begeister. ich finde diese funktion einfach sehr schon für variable strings. "blabla {0} blabla", "hurra" oder was auch immer. diese funktion ist eine meiner lieblingsfunktionen. ich kann sie sogar gewissermaßen nachschreiben. aber mich hätte sehr interessiert wie Microsoft selber diese Funktion geschrieben hat. Also ob es nicht noch etwas optimaler geht als ich es tue.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grundlagen lernen ist --- Arbeit 
Autor: ModeratorFZelle (Moderator)
Datum: 26.12.12 21:16

Was Du lesen willst gibt es nicht, das nennt sich Erfahrung.
Es nutzte keinem von "Uns" zu wissen was OOP ist, wie ein Pattern heisst oder wie man dies oder das schreibt.

Du musst diese Grundlagen ( die allerdings vorhanden sein sollten ) in der Praxis erfahren.
Dazu kannst Du Dir z.b. anschauen wie MS das eine oder andere implementiert hat, das ist schon seit 4 Jahren zugänglich http://weblogs.asp.net/scottgu/archive/2008/01/16/net-framework-library-source-code-now-available.aspx

Ansonsten hilft es auch mal das was Du machen willst in der OpenSource anzuschauen.
In deinem Fall also Z.B.: http://www.codeproject.com/Articles/161871/Fast-Colored-TextBox-for-syntax-highlighting

Dann am besten dort weiterlesen und evtl sich mit Architektur beschäftigen, dann wirst du auch feststellen das nicht alles in OOP passt, und das man manchmal auch einfach eine Funktion schreibt.

Je länger man sich mit SW Entwicklung beschäftigt um so mehr vermeintliche Lösungen gibt es für das selbe Problem. Und jeder meint die beste und "schönste" Lösung gefunden zu haben.
Ich kenne SW Architekten die meinen Interfaces sind das alleinig selig machende, andere halten nichts von ihnen.
Und wenn Du etwas zu OOP liest, solltest Du vermeiden die Java Leute zu fragen, die haben ein noch anderes Verhältnis dazu.

Wenn Du dann im INet mal suchst, wirst Du Glaubenskriege entdecken.
Deshalb hilft es nichts, du musst da selber durch.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Grundlagen lernen ist --- Arbeit 
Autor: Tomarr
Datum: 29.12.12 14:43

Ja also das nicht alles in OOP passt das habe lerne ich schmerzlich eigentlich bei jedem Projekt das ich mache. Vieles klingt im Kopf noch wie eine gute Idee das ganze in OOP umzusetzen während es in der Praxis mal so gar nicht hin haut. Gut, da ist dann halt der Unterschied zu einem Profi und mir, der hätte das vielleicht schon vorher gewusst.

Klar ist auch das es für ein Problem locker mal 10 Lösungen gibt. Bei mir ist das dann halt so, vieles bekomme ich gelöst, klar sonst hätte ich schon lange aufgegeben, aber ich gehöre nicht zu den Hobbyprogrammierern die alles was bei ihnen funktioniert auch gleichzeitig toll finden. Es gibt so einige Sachen, auch auf deiner angesprochenen Seite Codeproject wo ich denke "Boa ist das elegant gelöst"

Aber grössten Teils gilt für mich einfach auch die Neugier. Vieles kann ich ja auch durch Externas lösen, wie z.B. mit der AForge Sammlung für Webcamzugriff etc. Trotzdem würde ich halt schon gerne wissen wie das ganze aussieht. Lernen halt.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel