Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
RichTextBox: das Wert von SelectionFont ist null
spongebob
myCSharp.de - Member



Dabei seit:
Beiträge: 37
Herkunft: Köln

Themenstarter:

RichTextBox: das Wert von SelectionFont ist null

beantworten | zitieren | melden

Hallo, zusammen!
Das ist eigentlich ein String


"{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1031{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 Arial;}{\\f1\\fdecor\\fprq2\\fcharset0 Broadway;}{\\f2\\fswiss\\fprq2\\fcharset0 Berlin Sans FB Demi;}{\\f3\\fscript\\fprq2\\fcharset0 Brush Script MT;}{\\f4\\fnil\\fcharset0 Microsoft Sans Serif;}}\r\n\\viewkind4\\uc1\\pard\\sa200\\sl276\\slmult1\\lang1033\\b\\i\\f0\\fs40 Test Rtf\\par\r\n\\b0\\i0\\f1\\fs48 Test Rtf \\f2 Test\\f1  \\f3 Rtf\\lang1031\\f4\\fs17\\par\r\n}\r\n"
, das Eigenschaft Rtf von Komponente RichTextBox initialisiert. Ich selektiere ein Wort, das mit 18 Positionen 18 fängt an. Und zwar ist das Wort „Test“. Dann die Eigenschaft SelectionFont das Wert null hat.
Obwohl die Schriftart für das Wort im rtf-Linie ist vorhanden "Berlin Sans FB Demi"
Wie kann ich das Problem zu lösen?
Danke im voraus
private Nachricht | Beiträge des Benutzers
vbprogger
myCSharp.de - Experte

Avatar #avatar-1820.gif


Dabei seit:
Beiträge: 1723
Herkunft: NRW/DE

beantworten | zitieren | melden

Hallo,

laut RichTextBox.SelectionFont-Eigenschaft: Wenn für die aktuelle Textauswahl mehr als eine Schriftart angegeben ist, ist diese Eigenschaft null.

Und das ist auch so bei dir der Fall. Zwischen dem Wort Test und dem Schriftformat Berlin Sans FB Demi stehen noch Brush Script MT und Microsoft Sans Serif!

Grüße
Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.
---------
Bemerkung: ich beantworte keine Fragen via PM, denn das Forum soll ja was davon haben!
private Nachricht | Beiträge des Benutzers
spongebob
myCSharp.de - Member



Dabei seit:
Beiträge: 37
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

Erst bedanke mich für Antwort.
Zitat
Wenn für die aktuelle Textauswahl mehr als eine Schriftart angegeben ist, ist diese Eigenschaft null

Es ist mir klar. Aber wenn ich sogar EINE BUCHSTABE aus Wort "Test" mit Methode Select wähle - bekomme ich immer SelectionFont null.
Zitat
Zwischen dem Wort Test und dem Schriftformat Berlin Sans FB Demi stehen noch Brush Script MT und Microsoft Sans Serif
Können Sie mir besser erklären, was Sie hier genau meinten

Nochmal Danke
private Nachricht | Beiträge des Benutzers
vbprogger
myCSharp.de - Experte

Avatar #avatar-1820.gif


Dabei seit:
Beiträge: 1723
Herkunft: NRW/DE

beantworten | zitieren | melden

Zum einen duzen wir generell in allen deutschen Foren, die unter dem Motto "Hilfe zur Selbsthilfe" agieren, unabhängig davon welchen Alter man hat. Zum anderen du hast gepostet:
Zitat von spongebob


"{\\rtf1\\ansi\\ansicpg1252\\deff0\\deflang1031{\\fonttbl{\\f0\\fswiss\\fprq2\\fcharset0 Arial;}{\\f1\\fdecor\\fprq2\\fcharset0 Broadway;}{\\f2\\fswiss\\fprq2\\fcharset0 Berlin Sans FB Demi;}{\\f3\\fscript\\fprq2\\fcharset0 Brush Script MT;}{\\f4\\fnil\\fcharset0 Microsoft Sans Serif;}}\r\n\\viewkind4\\uc1\\pard\\sa200\\sl276\\slmult1\\lang1033\\b\\i\\f0\\fs40 Test Rtf\\par\r\n\\b0\\i0\\f1\\fs48 Test Rtf \\f2 Test\\f1  \\f3 Rtf\\lang1031\\f4\\fs17\\par\r\n}\r\n"

schau also genau hin, dann siehst du auch dass
Zitat
Zwischen dem Wort Test und dem Schriftformat Berlin Sans FB Demi stehen noch Brush Script MT und Microsoft Sans Serif
die Lösung besteht darin, dass du Bereichsweise formatieren muss, wenn du solche Info holen möchtest, d.h. zB:

falsch: (symbolisch)


Berlin Sans FB Demi
{
   Brush Script MT
   {
      Test
   }
}

richtig


Berlin Sans FB Demi
{
   Test
}
Brush Script MT
{
   Foo
}
Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.
---------
Bemerkung: ich beantworte keine Fragen via PM, denn das Forum soll ja was davon haben!
private Nachricht | Beiträge des Benutzers
spongebob
myCSharp.de - Member



Dabei seit:
Beiträge: 37
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

Zitat
Zwischen dem Wort Test und dem Schriftformat Berlin Sans FB Demi stehen noch Brush Script MT und Microsoft Sans Serif

Leider verstehe ich das nicht


\\f2 Test\\f1  \\f3 Rtf

Ich verstehe so - Für Test ist zuständig Schriftart mit Bezeichnung f2, für Leerezeichen - f1 und für Rtf - f3
Oder verstehe ich etwas falsch?
private Nachricht | Beiträge des Benutzers
vbprogger
myCSharp.de - Experte

Avatar #avatar-1820.gif


Dabei seit:
Beiträge: 1723
Herkunft: NRW/DE

beantworten | zitieren | melden

siehe hier: Rich Text Format und hier Font Table
Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.
---------
Bemerkung: ich beantworte keine Fragen via PM, denn das Forum soll ja was davon haben!
private Nachricht | Beiträge des Benutzers
spongebob
myCSharp.de - Member



Dabei seit:
Beiträge: 37
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

Also Font Tab Sagt
Zitat
Unique \fN control words define each font available in the document, and are used to reference that font throughout the document.

Wie ich gesagt habe.
Zitat

\\f2 Test\\f1  \\f3 Rtf
Ich verstehe so - Für Test ist zuständig Schriftart mit Bezeichnung f2, für Leerezeichen - f1 und für Rtf - f3

f2 ist für

{\\f2\\fswiss\\fprq2\\fcharset0 Berlin Sans FB Demi;}

Ich hab probiert statt Berlin Sans FB Demi andere Schriftart benutzen z.B. so

{\\f2\\fswiss\\fprq2\\fcharset0 Bauhaus 93;}
Und in diesem Fall Schriftart wurde erkannt.

Kannst Du das erklären?
private Nachricht | Beiträge des Benutzers
vbprogger
myCSharp.de - Experte

Avatar #avatar-1820.gif


Dabei seit:
Beiträge: 1723
Herkunft: NRW/DE

beantworten | zitieren | melden

Nein, leider kann ich es nicht erklären, da so tief in RTF kenne ich mich auch nicht aus, aber IMHO sollst du mit geschweifte Klammer { und } im Textfluß arbeiten, damit die Begrenzung eindeutig ist.
Ich bin verantwortlich für das, was ich sage, nicht für das, was du verstehst.
---------
Bemerkung: ich beantworte keine Fragen via PM, denn das Forum soll ja was davon haben!
private Nachricht | Beiträge des Benutzers
spongebob
myCSharp.de - Member



Dabei seit:
Beiträge: 37
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

Zitat
IMHO sollst du mit geschweifte Klammer { und } im Textfluß arbeiten, damit die Begrenzung eindeutig ist.

Leider ich erstelle kein rft, sondern analysiere eingegangene rtf-strings.
private Nachricht | Beiträge des Benutzers
ProGamer
myCSharp.de - Member



Dabei seit:
Beiträge: 691
Herkunft: NRW

beantworten | zitieren | melden

Mal ne Alternative:

wäre es nicht eine Option das RTF in ein HTML umzuwandeln und dann entsprechend zu parsen?
das dürfte denke ich mal einfacher sein.

Du willst doch nur wissen welche Schriftart für welchen Text verwendet wird oder?
MfG
ProGamer
private Nachricht | Beiträge des Benutzers
hypersurf
myCSharp.de - Member



Dabei seit:
Beiträge: 521
Herkunft: Münster

beantworten | zitieren | melden

Schau Dir mal dieses Projekt an: http://sourceforge.net/projects/rtfdomparser/
Da wird der ganze RTF-Text schon zerlegt. Das könnte Dir die passenden Ansätze liefern.
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von hypersurf am .
private Nachricht | Beiträge des Benutzers
spongebob
myCSharp.de - Member



Dabei seit:
Beiträge: 37
Herkunft: Köln

Themenstarter:

beantworten | zitieren | melden

Zitat
Du willst doch nur wissen welche Schriftart für welchen Text verwendet wird oder?
Nicht nur...
Ich benutze follgende Eigenschäften vom RichTextBox
SelectedText
SelectionFont
SelectionColor
Width
Height
bzw. Methode GetPositionFromCharIndex
Zitat
Schau Dir mal dieses Projekt an: http://sourceforge.net/projects/rtfdomparser/

Sieht gut aus, aber ich kann es nicht erstellen, da ich drei mal eine Fehlermeldung kriege. "Zu viele Zeichen im Zeichenliteral"

Fehler erscheint in der Zeilen 165, 171 in der Datei RTFNodeGroup.cs und in der Zeile 85 in der Datei Parser.cs


///Datei RTFNodeGroup.cs
					if( node.Keyword == "emdash")
					{
						AddString( myStr , buffer );
						myStr.Append( '¡ª'); ///Fehler
						continue ;
					}
					if( node.Keyword == "" )
					{
						AddString( myStr , buffer );
						myStr.Append( '¨C' ); ///Fehler
						continue ;
					}

////Datei Parser.cs
            if ( token.Key == "emdash")
            {
                CheckBuffer();
                myStr.Append('¡ª'); ///Fehler
                return true;
            }
Ich verstehe, dass so es nicht umsonst gemacht wurde. Aber wie kann ich das ohne Fehler erstellen?
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16204

beantworten | zitieren | melden

Diese Fehlermeldung fällt unter die Grundlagen, die wir vorraussetzen.
[Hinweis] Wie poste ich richtig? 1.1.1

Der Fehler wird die Zeile if ( token.Key == "emdash") sein. Stichwort: Datentypen.

Die Forensuche bringt Dich im 4. Treffer auf [Hinweis] Syntaxfehler selbst lösen (Compilerfehlermeldungen)
Bitte zeig in Zukunft ein wenig mehr Eigeninitative und lass nich uns Deinen Job machen.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
Th69
myCSharp.de - Experte

Avatar #avatar-2578.jpg


Dabei seit:
Beiträge: 4188

beantworten | zitieren | melden

Hallo,

die drei Fehler erscheinen mir eher als Encoding-Problem der Source-Code-Datei (ASCII <-> UTF8 o.ä).
private Nachricht | Beiträge des Benutzers