2016-08-17 7 views
1

У меня есть 2 комбобокса для шрифта и шрифта. Когда я нажимаю на них, он меняет размер шрифта или шрифт в моем richtextbox. Теперь я хочу, чтобы он работал, как на словах. Если строка, которую вы только что переместили, имеет другой шрифт или размер. Он должен обнаружить это и изменить comboxes, чтобы соответствовать шрифту и размеру текущей строки. Еще один Сомоэйн задал этот вопрос и получил результат, который не сработал для меня. Это было следующимКак получить шрифт определенной строки в richtextbox в C# с помощью winforms

private void richTextBox1_SelectionChanged(object sender, EventArgs e) 
    { 
     MessageBox.Show("we got here"); // this is my added part to let me know if the code is even getting executed. It is not. 
     richTextBox1.SelectionStart = 1; 
     richTextBox1.SelectionLength = 1; 
     comboBox1.Text = richTextBox1.SelectionFont.ToString(); 
     comboBox2.Text = null; 
     comboBox2.Text = richTextBox1.SelectionFont.Size.ToString(); 

    } 

Я надеялся, что это был мой ответ, но я не мог видеть, как SelectionFont бы никакой разницы, если не было выбрано ничего. Также событие richTextBox1_SelectionChanged, кажется, не вызывается, когда я перемещаю документ со стрелками вверх/вниз. Проблема заключается не в comboboxes, проблема в том, что по мере того, как я прокручиваю свой документ, мне нужно знать, какой шрифт и размер он находится в позиции каретки, чтобы он мог запустить событие, чтобы изменить соответствующие поля.

ответ

0

Вы должны сохранить значения для новой позиции COMBOBOX временно в переменных, в противном случае, если вы делаете это непосредственно

comboBox1.SelectedIndex = comboBox1.FindStringExact(richTextBox1.SelectionFont.Name); 

событие comboBox1_SelectedIndexChanged будет немедленно вызвал и может повлиять на результаты.

Так просто попробовать:

private void richTextBox1_SelectionChanged(object sender, EventArgs e) 
{ 
    int comboBox1Index = comboBox1.FindStringExact(richTextBox1.SelectionFont.Name); 
    int comboBox2Index = comboBox2.FindStringExact(richTextBox1.SelectionFont.Size.ToString()); 

    comboBox1.SelectedIndex = comboBox1Index; 
    comboBox2.SelectedIndex = comboBox2Index; 
} 
+0

Проблема заключается в том, что выбор изменилось событие не вызывается. Независимо от того, где в моем документе я все еще показываю последний шрифт, который я использовал. – Larryrl

+0

Затем это связано с вашим RichTextBox и обработкой событий. В моем примере тестирования он работает нормально. http://s000.tinyupload.com/index.php?file_id=87205811287792650699 – MarkusEgle

+0

Посмотрел на ваш пример и скопировал все на мои события, но он все еще не работал, но в моем решении comboBox1.SelectedIndex = 0; comboBox2.SelectedIndex = 0; выдает исключение, что SelectIndex не может быть 0 – Larryrl

1

Код, который вы используете, всегда будет делать выбор из символов по индексу 1 и имеет длину 1. вместо этого вам нужно использовать, который даст вам следующий код без указания выбора (так что он будет выбирать из ritchTextBox).

string fontName = richTextBox1.SelectionFont.Name; 
float fontsize = richTextBox1.SelectionFont.Size; 
Смежные вопросы