RTB dynamische Fontgrößenänderung

Rando

Mitglied
Hallo allerseits,

ich habe eine Richtextbox zur Eingabe chemischer Formeln also ausschließlich Kombinationen aus Buchstaben und Ganzzahlen. Nun habe ich der Box schon per "OnKeyPress"-Event beigebracht die Fontgröße bei der Tastatureingabe von Zahlen zu verkleinern und bei Buchstaben und anderen Zeichen die Größe beizubehalten.

Nun habe ich eine TreeView aus der ich bei "SelectedItemDoubleClick" eine hinterlegte Formel direkt in die RTB übertrage (so eine Art Standardformelsammlung um dem User das Leben leichter zu machen). Natürlich wird der String korrekt übertragen allerdings, da es sich hierbei NICHT um eine Tastatureingabe handelt, wird die Schriftgröße für Zahlen nicht verkleinert.

Mein Ansatz war nun den Gesamtstring der RTB auszulesen, via .ToCharArray() in ein CharArray zu lesen und dann Char für Char wieder in die RTB zu schreiben und dabei natürlich auf IsNumeric zu parsen.

PROBLEM: Leider gelingt es mir nicht für den Fall das eine Zahl erkannt wird die Fontgrößenänderung anzustossen.

Anbei der Quellcode in Ausschnitten:
Code:
public void ChangeFontSize(float fontSize)
        {
            int len = rtb_Summenformel.SelectionLength;

            // If len <= 1 and there is a selection font, amend and return
            if (len <= 1 && rtb_Summenformel.SelectionFont != null)
            {
                rtb_Summenformel.SelectionFont =
                    new Font("Microsoft Sans Serif", fontSize, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
                return;
            }
        }

#region Parser für Groß- und Kleinschreibung bei Übernahme Summenformel aus TreeView
        private void RichTextBoxUpdate()
        {
            string zupruefenderstring = rtb_Summenformel.Text;

            char[] array = zupruefenderstring.ToCharArray();

            rtb_Summenformel.Clear();

            foreach (char c in array)
            {
                if (IsNumeric(c))
                {
                    ChangeFontSize(7);
                    rtb_Summenformel.Text += c.ToString();
                }
                else
                {
                    ChangeFontSize(15);
                    rtb_Summenformel.Text += c.ToString();
                }
            }
        }

        public static bool IsNumeric(object value)
        {
            try
            {
                int i = Convert.ToInt16(value.ToString());
                return true;
            }
            catch (FormatException)
            {
                return false;
            }
        }
        #endregion

Für Hilfe und/oder Vorschläge bin ich sehr dankbar.

Greeds Rando :D
 
Zuletzt bearbeitet:
Wieso rufst du deine Funktion nur beim Event KeyPressed auf, und nicht gleich bei dem Event, das aufgerufen wird, wenn der Wert in der RTB geändert wird. Dann ist es egal, ob per Tasten oder über das TreeView Teil der Text geändert wird ;)

Lg, Yanick
 

Neue Beiträge

Zurück