2012-04-12 6 views
2

Wenn Sie das Folgende in eine RichTextBox einfügen, verwandelt sich das CJK-Zeichen und alles danach in eine zweite Schriftart - SimSun.Das Einfügen von CJK-Zeichen in eine RichTextBox fügt eine unerwünschte zweite Schriftart hinzu.

ein CJK Zeichen einfügen: 色

... macht diese Schriftart ändern.

Dies wirkt sich in unerwünschter Weise auf die Formatierung der RichTextBox aus und verlangsamt auch große Kopien/Pasten massiv.

Ich habe versucht, die RichTextBox zu verwenden, um eine Unicode-Schriftart wie "Lucida Sans Unicode" zu verwenden, und stellte auch sicher, dass die Quelle, die ich kopierte (Wordpad) auch die "Lucida Sans Unicode" -Schriftart verwendete. Aber am Ende des Tages, wenn ich in die RichTextBox einfügen, zwingt es die Verwendung einer anderen Schriftart wie SimSun (oder andere Schriftarten wie "Shonar Bangla" oder "Microsoft Himalaya", wenn wir einen anderen Typ von Zeichen verwenden).

Seit "Lucida Sans Unicode" hat sie alle, warum kann es nicht bei der einen Schriftart bleiben?

Ich bemerkte jemand anderes auch ein ähnliches Problem hat: RichTextBox - retain original formatting (font), even after paste

Leider sind die Lösungen, die auf dieser Seite nicht für mich arbeiten, wie ich immer noch die RTB verwendet eine andere Schriftart nach dem CJK Zeichen finden.

Antwort

2

Leider trotz seines etwas verwirrend Namen, hat Lucida Sans Unicode nicht CJK-Zeichen enthalten (wie Sie von Schriften mit Unicode in seinem Namen erwarten könnten). Dies löst einen Font-Fallback-Mechanismus aus, der zu einer Schriftart führt, die das erforderliche Symbol enthält. Die einzige mögliche Lösung, die ich sehe, ist die Verwendung einer Schriftart, die tatsächlich alle erforderlichen Zeichen enthält.

+0

Der gesamte Unicode-Standard ist riesig und würde eine Schriftgröße von mehreren Megabyte erfordern, um sie alle zu implementieren. Wenn Sie mit einer Schriftart wie Bitstream Vera gehen, deckt das die am häufigsten verwendeten Skripte ab, nur keine alten Skripte, Klingonen usw. – Sprachprofi

+0

Vielleicht nicht so verwirrender Name ... 'sans' bedeutet' ohne' in Französisch. –

+0

@ Mark: Ich würde zustimmen, außer dass es eine Schriftart namens "Lucida Sans" gibt. Also bezieht sich die 'Sans' hier auf Sans Serif. –

0

Um Petrs Antwort zu ergänzen (und teilweise Informationen aus seinem Kommentar zu verwenden), stellt sich heraus, dass viele Unicode-Symbole in einer RichTextBox viel langsamer rendern.

Aber durch das Herausfiltern von Unicode-Zeichen von etwa 1280 (0x500) und größer, habe ich festgestellt, dass die Paste so schnell wie zuvor ist.

6

Ich habe dieses Problem selbst ein- und ausgeschaltet.

Nach dem Umdrehen hier und da im Internet heute, bemerkte ich etwas auf msdn und versuchte etwas. Fügen Sie diese Zeile in Form1_Load() oder das Formular Konstruktor NACH der InitializeComponent() Linie:

richTextBox1.LanguageOption = RichTextBoxLanguageOptions.DualFont; 

Ich bin kein Experte, und ich kann Ihnen nichts sagen, warum es funktioniert, aber es funktioniert für mich!

+1

Interessant. Welche Schriftart verwendest du? Offensichtlich müsste es eine sein, die mindestens einen angemessenen Teil des Unicode-Sets enthält. –

+0

Ich habe es ausprobiert, und ja scheint es, dass jede Zeile die gleiche Höhe hat. Unglücklicherweise ist es immer noch langsam, den gemischten Text zu laden (um zu testen, probiere die "Liste der Farben" Quelle in Wikipedia), und bestimmte Unicode-Zeichen (wie రంగుల పట్టిక) kommen nicht unversehrt durch (sie entpuppen sich als Boxen)). –