Benutzer mit den meisten Antworten
Zweite Fortsetzung RichTextBox

Frage
-
Hallo
Es geht um dasselbe Projekt wie in den vergangenen Fragen.
In ein Panel wurde eingefügt:
ComboBox - zeigt die installierten Schriftarten an
Buttons(size) - Schriftgröße ändern (Selection Font)
Buttons(style) - Schriftstil ändern (Bold, Italic….)
Zwei Buttons(style) sind mit Bold/Underline und mit Italic/Underline belegt.
private void button5_Click(object sender, EventArgs e)
{
richTextBox1.SelectionFont = new Font(comboBox1.Text, richTextBox1.Font.Size, FontStyle.Bold | FontStyle.Underline);
}
}
Das Problem ist, wenn ich mit diesen Buttons die Schriftgröße ändern will, wird nur Underline alleine angezeigt.
if (richTextBox1 .SelectionFont .Bold && richTextBox1 .SelectionFont .Underline )
{
richTextBox1.SelectionFont = new System.Drawing.Font(comboBox1.Text, 11,( FontStyle.Bold)|FontStyle.Underline);
}
Was mache ich hier falsch?
- Bearbeitet Robert Breitenhofer Montag, 30. April 2012 07:54 Formatierung
Antworten
-
Hallo Christina,
ich hatte bisher keine Zeit Dein Programm anzuschauen, deswegen die späte Rückmeldung.
Zu den Schriftarten:
Die sind nicht kaputt. Es ist vielmehr so, dass nicht jede Schriftart alle Stile unterstützt.
So wird Heavy für eine sehr prägnante Schriftart stehen, die durch eine zusätzliche fette Darstellung unleserlich
(oder zumindest sehr unschön würde). Und dies deswegen nicht unterstützt.
Ähnliches gilt für Schmuckschriften - so ist Aharoni nur mit der Auszeichung fett verfügbar.Im Programm kann man das über die FontFamily.IsStyleAvailable Methode prüfen.
Wenn Du den Schriftauswahl-Dialog mit Deiner ComboBox-Auswahl vergleichst, so wirst
Du feststellen, dass in der Schriftauswahl weniger Schriftarten auftauchen (so fehlt z. B. Aharoni).Um nur die Schriftarten anzuzeigen, die mindesten als "normaler" (regular) Schnitt verfügbar sind,
müsstest Du die Auswahl der ComboBox begrenzen, was z. B. über Filter ginge:private void VS_Editor1_Load(object sender, EventArgs e) { FontFamily[] Schriftart = (from f in FontFamily.Families where f.IsStyleAvailable(FontStyle.Regular) select f).ToArray(); comboBox1.DataSource = Schriftart; // ... weiter wie bisher }
Als nächsten Schritt solltest Du Code zu reduzieren, da sehr viel kopiert wurde.
So kannst Du z. B. die Änderungen für die Schriftgröße mit einer einzigen Ereignis-Behandlung erledigen.
Ein (vereinfachter) Vorschlag wäre z. B.:private void fontSizeButton_Click(object sender, EventArgs e) { var fontSizeButton = sender as Button; try { // FontSize über den Text (alternativ über Tag-Eigenschaft) float fontSize = Single.Parse(fontSizeButton.Text); FontFamily family = new FontFamily(this.comboBox1.Text); FontStyle style = this.richTextBox1.SelectionFont.Style; if (family.IsStyleAvailable(style)) { Font newFont = new Font(family, fontSize, style, GraphicsUnit.Pixel); this.richTextBox1.SelectionFont = newFont; this.fontnameTextBox.Text = richTextBox1.SelectionFont.Name; } } catch (Exception ex) { Debug.WriteLine(ex.Message, "fontSizeButton_Click"); } }
dabei werte ich den Text des Buttons aus um die Schriftgröße zu bestimmen -
alternativ könnte man auch die Tag-Eigenschaft des Buttons dafür verwenden.
Diese Routine kannst Du nun allen Schriftgrößen-Schaltflächen dem Click-Ereignis zuweisen
(und die bisherigen Routinen entsorgen).Ein entsprechendes Vorgehen bietet sich auch für die Schriftstile und anderes mehr an.
Gruß Elmar
- Als Antwort markiert ch.f.1 Montag, 7. Mai 2012 02:25
-
Hallo,
die andere Größe ergibt sich daraus, das ich (unbdeachterweise) GraphicsUnit.Pixel im Code verwendet habe,
daraus ergibt sich eine andere Größe als beim Standard GraphicsUnit.Point - das Verhältnis ist 72 (pt) / 96 (px) = 0,75.
Das einfachste wäre hier, wieder Point zu verwenden, denn Feinheiten
interessieren Anwender selten, nur wie "groß" das Schriftbild aussieht.Weitere Fragen kannst Du gerne stellen.
Bitte in einem neuen Thread, da dieser langsam unübersichtlich wird.Gruß Elmar
- Als Antwort markiert ch.f.1 Montag, 7. Mai 2012 02:19
-
Hallo ch.f.1,
Vielen Dank für Deine Frage und Beitrag!
Schau Dir mal auch folgenden Links an. Vielleicht können sie Dir weiterhelfen.
Difference between | and || or & and && for comparison [closed]
Ist button5 (man sieht Du hast ein button5_Click) von den Buttons(size) oder von den Buttons(style)?
Kannst Du Dein Problem deutlicher und völliger beschreiben?
Relevanter Code zu posten (poste mal den ganzen Code) wäre auch nicht schlecht oder eine .zip Datei mit den Code (falls der Code zu groß ist) kann man ihm Public Ordner von SkyDrive laden und den link hier Posten. (Wie nutze ich den SkyDrive?)
Jetzt kannst Du auch Bilder in die Beiträge einfügen: [Info] Neue Grafikfunktion für MSDN Forenbeiträge | Neue Forum Feature: Bilder in einem Beitrag einfügen
Viele Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.- Als Antwort markiert ch.f.1 Montag, 7. Mai 2012 02:22
-
Hallo,
bei dem Umfang des Codes wäre es besser Du stellst das Projekt zum Download bereit, z. B. über Skydrive
Förderlich das langfristige Verständnis ist es, Steuerelemente einen Namen zu geben, der ihren Verwendungszweck beschreibt
(z. B. fontComboBox oder fontSizeButton)
Das kann man im Nachhinein relativ einfach über Umbenennen (F2 Taste) vornehmen.Gruß Elmar
- Als Antwort markiert ch.f.1 Montag, 7. Mai 2012 02:22
-
Hallo Christina Fröhlich,
Hilf mal das Problem zu reproduzieren. Ich habe folgendes gemacht:
1) Das Programm im Debugging-Mode von Visual Studio 2010 gestartet.
2) Eine RTF-Datei geladen
3) Auf Extras à Schriftauswahl Ein/Aus geklickt
Was soll man weiter machen?
Danke und Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.- Als Antwort markiert ch.f.1 Montag, 7. Mai 2012 02:20
Alle Antworten
-
Hallo ch.f.1,
Vielen Dank für Deine Frage und Beitrag!
Schau Dir mal auch folgenden Links an. Vielleicht können sie Dir weiterhelfen.
Difference between | and || or & and && for comparison [closed]
Ist button5 (man sieht Du hast ein button5_Click) von den Buttons(size) oder von den Buttons(style)?
Kannst Du Dein Problem deutlicher und völliger beschreiben?
Relevanter Code zu posten (poste mal den ganzen Code) wäre auch nicht schlecht oder eine .zip Datei mit den Code (falls der Code zu groß ist) kann man ihm Public Ordner von SkyDrive laden und den link hier Posten. (Wie nutze ich den SkyDrive?)
Jetzt kannst Du auch Bilder in die Beiträge einfügen: [Info] Neue Grafikfunktion für MSDN Forenbeiträge | Neue Forum Feature: Bilder in einem Beitrag einfügen
Viele Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.- Als Antwort markiert ch.f.1 Montag, 7. Mai 2012 02:22
-
Hallo Robert
Danke für die Antwort und für die Links. Kann sie leider erst am Abend lesen.
Button5 ist Button(style).Dummerweise habe ich einige Elemente(Buttons, Labels…) nicht umbenannt.
>Relevanter Code zu posten (poste mal den ganzen Code) wäre auch nicht schlecht….
Der Code ist ungefähr 3000 Zeilen lang. Soll ich trotzdem?
Die grafische Ansicht ist nicht sehr ansprechend, wird noch überarbeitet.
Es sind vier Panel(Visible true/false)
Erstes Panel (von links nach rechts):
Label (Color): MouseDown zeigt ARGB Anteile und Name der Farbe.
MouseClick = SelectedColor/SelectedBackColor. (CheckBox)
Zweites Panel:
ComboBox1 (Installierte Schriftarten)
ComboBox2 (noch ohne Funktion)
Buttons (FontSize)
Buttons (FontStyle)
Drittes Panel:
TextBox, Button, Label
Viertes Panel:
Drei TextBoxen, Fünf Label
MouseClick: + - * / einfache Rechnung ausführen.
DoubleClick: TextBox.Text = RichTextBox.Text
Unter dem dritten Panel sind noch Buttons mit Standartfunktionen geplant.
Das Problem ist folgendes: Zweites Panel – Button(Bold/Underline) und Button(Italic/Underline)
Diese Funktionen werden bei Größenänderung nicht zusammen angezeigt.
Melde mich am Abend wieder.
Mit freundlichen Grüßen
Chris
-
Hallo,
bei dem Umfang des Codes wäre es besser Du stellst das Projekt zum Download bereit, z. B. über Skydrive
Förderlich das langfristige Verständnis ist es, Steuerelemente einen Namen zu geben, der ihren Verwendungszweck beschreibt
(z. B. fontComboBox oder fontSizeButton)
Das kann man im Nachhinein relativ einfach über Umbenennen (F2 Taste) vornehmen.Gruß Elmar
- Als Antwort markiert ch.f.1 Montag, 7. Mai 2012 02:22
-
Hallo Robert
Leider konnte ich mich nicht früher melden, es tut mir leid.
Mit > C# Operators < habe ich einige Wissenslücken schließen können. Danke J
Das Problem konnte ich noch nicht lösen. Bitte Hilfe….
Beispiel mit Schriftgröße 11:
private void fontSize11Button_Click(object sender, EventArgs e)
{
if (richTextBox1.SelectionFont.Underline)
{
richTextBox1.SelectionFont = new System.Drawing.Font(comboBox1.Text, 11, FontStyle.Underline);
}
if (richTextBox1.SelectionFont.Bold)
{
richTextBox1.SelectionFont = new System.Drawing.Font(comboBox1.Text, 11, FontStyle.Bold);
}
if (richTextBox1.SelectionFont.Italic)
{
richTextBox1.SelectionFont = new System.Drawing.Font(comboBox1.Text, 11, FontStyle.Italic);
}
if (richTextBox1.SelectionFont.Strikeout)
{
richTextBox1.SelectionFont = new System.Drawing.Font(comboBox1.Text, 11, FontStyle.Strikeout);
}
if (richTextBox1.SelectionFont.Strikeout == false && richTextBox1.SelectionFont.Italic == false && richTextBox1.SelectionFont.Bold == false && richTextBox1.SelectionFont.Underline == false)
{
richTextBox1.SelectionFont = new System.Drawing.Font(comboBox1.Text, 11, FontStyle.Regular);
}
if (richTextBox1.SelectionFont.Bold && richTextBox1.SelectionFont.Underline == true && richTextBox1.SelectionFont.Italic == false)
{
richTextBox1.SelectionFont = new System.Drawing.Font(comboBox1.Text, 11, FontStyle.Bold & FontStyle.Underline);
}
// if (richTextBox1.SelectionFont.Underline == true && richTextBox1.SelectionFont.Italic == true)
if (richTextBox1.SelectionFont.Italic && richTextBox1.SelectionFont.Underline)
{
richTextBox1.SelectionFont = new Font(comboBox1.Text, 11, FontStyle.Italic & FontStyle.Underline);
}
fontnameTextBox.Text = richTextBox1.SelectionFont.Name.ToString();
}
Der Code ist bis jetzt fast sechzig Wordseiten lang. Ich weiß nicht ob sich das jemand antun möchte….
Wenn doch, bitte um Nachsicht für teilweises Chaos im Code, das wird sich noch ändern.
https://skydrive.live.com/#!/?cid=5E879F44EE9DDF78&id=5E879F44EE9DDF78%21121
Ich hoffe, es ist der richtige Link mit dem Projekt.
Noch eine Information zum Projekt:
Ich habe Editor_19042012 auf einem anderen PC mit Visual Studio 2011 bearbeitet. Wenn das ein Problem ist wegen der unterschiedlichen Net.Framework Versionen, bitte schreiben.
Ich werde dann das ursprüngliche VS 2010 Projekt schicken (Kann aber etwas dauern).
Mit freundlichen Grüßen
Chris
- Bearbeitet ch.f.1 Dienstag, 1. Mai 2012 13:43
-
Hallo Elmar
Danke für die Antwort.
> Förderlich das langfristige Verständnis ist es, Steuerelemente einen Namen zu geben….
Ich war teilweise etwas zu nachlässig, aber das wird sich ändern. In meinen vorhergehenden Anfragen habe ich schon geschrieben, das ich noch nicht viel Erfahrung mit C# habe. Aber mit jedem erfolgreichen Schritt wird man mehr davon gefangen und es entsteht Faszination und eine Art Zuneigung zu C#.
Mir liegt sehr viel daran, dieses Projekt umfangreich, optisch ansprechend und gut funktionierend (Benutzerfreundlich) fertigstellen zu können, trotz meines noch geringen Wissens. Ich bin für jeden Rat dankbar, der mich zu diesem Ziel näherbringt.
Zum Link habe ich schon an Robert Breitenhofer geschrieben, das ich Zweifel habe, ob es nicht Probleme gibt, weil dieses Projekt mit VS2010 und VS2011 bearbeitet wurde.
https://skydrive.live.com/#!/?cid=5E879F44EE9DDF78&id=5E879F44EE9DDF78%21121
Mit Freundlichen Grüßen
Chris
- Bearbeitet ch.f.1 Dienstag, 1. Mai 2012 13:53
-
Hallo Robert
Ich habe den Code in neue Buttons geschrieben und über die anderen gelegt(Finde ich nicht so optimal).Vielleicht gibt es bessere Lösungen?
Aber es funktioniert nun.
private void fontSizeButton_9_Click(object sender, EventArgs e)
{
if (richTextBox1.SelectionFont.Bold && richTextBox1.SelectionFont.Underline)
{
richTextBox1.SelectionFont = new Font(comboBox1.Text, 9, FontStyle.Bold | FontStyle.Underline);
}
if (richTextBox1.SelectionFont.Italic && richTextBox1.SelectionFont.Underline)
{
richTextBox1.SelectionFont = new Font(comboBox1.Text, 9, FontStyle.Italic | FontStyle.Underline);
}
}
Beim Hochladen auf SkyDrive gab es zuerst eine Panne (falsche Dateien).
Ist der Link in Ordnung?
Mit freundlichen Grüßen
Chris
-
Hallo Elmar
Wahrscheinlich habe ich mir das Vorhaben FontSize.Bold und FontSize.Underline gleichzeitig anzuzeigen selbst versperrt. Ich denke durch den Code von FontSize.Regular.
Ich habe nun noch einmal vierzehn Buttons (Visible true/false) über die bereits vorhandenen fontSizeButtons gelegt und den Code eingetragen. Es hat funktioniert, aber vielleicht gibt es doch noch bessere Lösungsmöglichkeiten.
private void fontSizeButton_9_Click(object sender, EventArgs e)
{
if (richTextBox1.SelectionFont.Bold && richTextBox1.SelectionFont.Underline)
{
richTextBox1.SelectionFont = new Font(comboBox1.Text, 9, FontStyle.Bold | FontStyle.Underline);
}
if (richTextBox1.SelectionFont.Italic && richTextBox1.SelectionFont.Underline)
{
richTextBox1.SelectionFont = new Font(comboBox1.Text, 9, FontStyle.Italic | FontStyle.Underline);
}
}
Beim Hochladen des Projekts habe ich zuerst einen Fehler gemacht. Ist es nun in Ordnung?
Hat der Link funktioniert?
Mit freundlichen Grüßen
Chris
-
Hallo Chris,
ich konnte auf die Dateien bei Skydrive nicht zugreifen.
Hast Du den Zugriff auf öffentlich geändert? Denn ansonsten außer Dir niemand anderes darauf zugreifen.
Siehe dazu Wie nutze ich den Skydrive?
Gruß Elmar
-
Hallo Robert
Es ist mir peinlich, aber ich habe die falschen Dateien hochgeladen.
Habe es jetzt korrigiert.
Hallo Christina Fröhlich,
Ich kann es auch Bestätigen das man die Dateien nicht herunterladen kann, weil keine Elemente freigegeben wurden. Versuch es mal nochmals mit dem Link von Elmar der Dir zeigt wie man SkyDrive benutzt.
Danke und Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Hallo Elmar
Hoffentlich geht es nun
Viele Grüße
Chris
-
Hallo Robert
Hoffentlich geht es jetzt
Viele Grüße
Chris
-
Hallo Christina Fröhlich,
Es hat jetzt geklappt. Die Dateien kann man eiwandfrei herunterladen.
Ich muss mir das ganze nochmals anschauen.
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Hallo Christina Fröhlich,
Hilf mal das Problem zu reproduzieren. Ich habe folgendes gemacht:
1) Das Programm im Debugging-Mode von Visual Studio 2010 gestartet.
2) Eine RTF-Datei geladen
3) Auf Extras à Schriftauswahl Ein/Aus geklickt
Was soll man weiter machen?
Danke und Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.- Als Antwort markiert ch.f.1 Montag, 7. Mai 2012 02:20
-
Hallo Robert
Ich habe Deine Nachricht schon zu Mittag gelesen, musste aber wieder zur Arbeit….
Habe etwas Text kopiert, eine Schriftart (in der ComboBox) ausgewählt; ein Wort oder eine Wortgruppe markiert, mit Mouse Click auf F,K,U, N, F oder K den Schriftstil geändert ( Standartgröße – bei mir sehr klein ) und danach mit Mouse Click auf die Zahlenbuttons die Schriftgröße. Wenn kein Wort ausgewählt ist, ändern sich die neu geschriebenen Zeichen (beliebige Cursorposition).
Erste Zeile Arial F,K, U, N, F, K
Zweite Zeile Größe 10 14 17 19
Dritte Zeile Verschiedene Schriften
Bei manchen Schriftarten passiert leider:
Die Farbentabelle funktioniert ähnlich (aber ohne Fehlermeldung):
Ist das Programm brauchbar? Lohnt es sich, weiterzumachen?
Viele Grüße
Chris
-
Hallo Robert
Habe an mehreren Stellen nochmal try/catch einfügen müssen .Es wäre besser gewesen, wenn ich es vor dem Hochladen genauer getestet hätte (fontSizeButtons 8 bis 21)
Bitte um Entschuldigung
Kann ich trotzdem auf weitere Hilfe hoffen?
Gleiche Nachricht auch an Elmar Boye.
Viele Grüße
Chris
-
Hallo Elmar
Habe an mehreren Stellen nochmal try/catch einfügen müssen .Es wäre besser gewesen, wenn ich es vor dem Hochladen genauer getestet hätte (fontSizeButtons 8 bis 21)
Bitte um Entschuldigung
Kann ich trotzdem auf weitere Hilfe hoffen?
Gleiche Nachricht auch an Robert Breitenhofer
Viele Grüße
Chris
-
Hallo Christina Fröhlich,
Wegen der Fehlermeldung mit der Schriftart, prüfe mal ob die Schriftart "Xpress Heavy SF" bei Dir in C:\Windows\Fonts (Ordner auf Windows 7 Betriebssystem) existiert.
Entsprechend der Information, die Du zur Verfügung gestellt hast, ist es wahrscheinlich, dass die Schriftart "Xpress Heavy SF" auf Deinem Clientcomputer beschädigt oder geändert wurde, und ihre Schriftstyle "Regular" fehlt. Da diese Situation nicht von den Standardmechanismus von Windows über Schriftarten ersetzen werden kann, empfehle ich, dass Du die Schriftart "Xpress Heavy SF" auf dem problematischen Computer installierst, und überprüfst, ob das Problem verschwunden ist.
PS: Du brauchst nicht alle Beiträge zweimal schreiben (an Elmar und an mich). Du kannst einfach einen Beitrag schreiben mit: „Hallo Elmar, Robert …“
Grüße,
Robert
Robert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Hallo Robert
Es sind mehrere Schriftarten, die Probleme bereiten. (“Accord Heavy SF” , “Agberg” , “ Aharoni” , “BolsterBold”, “Brush Script MT” , “Harlow Solid Italic” , “Locardo” , “Magneto” , “Monotype Corsiva”)
Die Schriftart “Aetna” wird aufgrund Deines Ratschlags ordnungsgemäß angezeigt.
Google hat heute leider nicht geholfen, die Schriftart “Xpress Heavy SF“ gibt es mit Bold/ Italic aber nicht Regular.
Weil ich mir nicht sicher bin, ob die genannten Schriftarten - System Fonts sind oder von installierten Programmen stammen, habe ich noch nichts deinstalliert. Wie soll ich weiter vorgehen?
Mit freundlichen Grüßen
Christina -
Hallo Christina,
ich hatte bisher keine Zeit Dein Programm anzuschauen, deswegen die späte Rückmeldung.
Zu den Schriftarten:
Die sind nicht kaputt. Es ist vielmehr so, dass nicht jede Schriftart alle Stile unterstützt.
So wird Heavy für eine sehr prägnante Schriftart stehen, die durch eine zusätzliche fette Darstellung unleserlich
(oder zumindest sehr unschön würde). Und dies deswegen nicht unterstützt.
Ähnliches gilt für Schmuckschriften - so ist Aharoni nur mit der Auszeichung fett verfügbar.Im Programm kann man das über die FontFamily.IsStyleAvailable Methode prüfen.
Wenn Du den Schriftauswahl-Dialog mit Deiner ComboBox-Auswahl vergleichst, so wirst
Du feststellen, dass in der Schriftauswahl weniger Schriftarten auftauchen (so fehlt z. B. Aharoni).Um nur die Schriftarten anzuzeigen, die mindesten als "normaler" (regular) Schnitt verfügbar sind,
müsstest Du die Auswahl der ComboBox begrenzen, was z. B. über Filter ginge:private void VS_Editor1_Load(object sender, EventArgs e) { FontFamily[] Schriftart = (from f in FontFamily.Families where f.IsStyleAvailable(FontStyle.Regular) select f).ToArray(); comboBox1.DataSource = Schriftart; // ... weiter wie bisher }
Als nächsten Schritt solltest Du Code zu reduzieren, da sehr viel kopiert wurde.
So kannst Du z. B. die Änderungen für die Schriftgröße mit einer einzigen Ereignis-Behandlung erledigen.
Ein (vereinfachter) Vorschlag wäre z. B.:private void fontSizeButton_Click(object sender, EventArgs e) { var fontSizeButton = sender as Button; try { // FontSize über den Text (alternativ über Tag-Eigenschaft) float fontSize = Single.Parse(fontSizeButton.Text); FontFamily family = new FontFamily(this.comboBox1.Text); FontStyle style = this.richTextBox1.SelectionFont.Style; if (family.IsStyleAvailable(style)) { Font newFont = new Font(family, fontSize, style, GraphicsUnit.Pixel); this.richTextBox1.SelectionFont = newFont; this.fontnameTextBox.Text = richTextBox1.SelectionFont.Name; } } catch (Exception ex) { Debug.WriteLine(ex.Message, "fontSizeButton_Click"); } }
dabei werte ich den Text des Buttons aus um die Schriftgröße zu bestimmen -
alternativ könnte man auch die Tag-Eigenschaft des Buttons dafür verwenden.
Diese Routine kannst Du nun allen Schriftgrößen-Schaltflächen dem Click-Ereignis zuweisen
(und die bisherigen Routinen entsorgen).Ein entsprechendes Vorgehen bietet sich auch für die Schriftstile und anderes mehr an.
Gruß Elmar
- Als Antwort markiert ch.f.1 Montag, 7. Mai 2012 02:25
-
Hallo Elmar
Danke für die Antwort.
Ein Teil Deiner Anweisungen wurde fertiggestellt und der Code um 691 Zeilen reduziert.
Die Schriftgröße wird jetzt Schrittweise um 0,75 erhöht (finde ich besser), aber die Anzeige stimmt nicht mehr überein (fontSize8_Button = FontSize 6 , fontSize9_Button = FontSize 6,75 ….)
Wenn ich den Text in den Eigenschaften anpasse, verändert sich die Schriftgröße nochmal. Ich habe ToolTip für die fontSizeButtons hinzugefügt, die jeweils die korrekte Schriftgröße (fontnameTextBox) anzeigen und werde ForeColor für alle fontSizeButtons auf Control einstellen.
Die Buttons, die ich über die fontSizeButtns gelegt habe sind durch Deinen neuen Code nicht mehr notwendig. Sie wurden umgeschrieben (fontSizeButton22 = FontSize16,5 bis fontSizeButton35 = FontSize 26,25).
Hoffentlich habe ich nicht zu unverständlich geschrieben.
Danke auch für:
- > Debug.WriteLine(ex.Message, "fontSizeButton_Click");
So bemerkt der Anwender nicht mehr, wenn ein Fehler auftritt.
Ich arbeite weiterhin an der Verbesserung und es werden sicher noch viele Probleme auftauchen, die ich selbst nicht lösen kann.
Das Programm ist zurzeit stabil. Optik leicht geändert (noch nicht abgeschlossen).
Mit freundlichen Grüßen
Christina
- Bearbeitet ch.f.1 Samstag, 5. Mai 2012 23:47
-
Hallo,
die andere Größe ergibt sich daraus, das ich (unbdeachterweise) GraphicsUnit.Pixel im Code verwendet habe,
daraus ergibt sich eine andere Größe als beim Standard GraphicsUnit.Point - das Verhältnis ist 72 (pt) / 96 (px) = 0,75.
Das einfachste wäre hier, wieder Point zu verwenden, denn Feinheiten
interessieren Anwender selten, nur wie "groß" das Schriftbild aussieht.Weitere Fragen kannst Du gerne stellen.
Bitte in einem neuen Thread, da dieser langsam unübersichtlich wird.Gruß Elmar
- Als Antwort markiert ch.f.1 Montag, 7. Mai 2012 02:19
-
Hallo Elmar
Danke für > GraphicsUnit .
>Weitere Fragen kannst Du gerne stellen.
>Bitte in einem neuen Thread, da dieser langsam unübersichtlich wird.
OKJ
Vielen Dank und viele Grüße
Christina