2014-11-02 1 views
1

У меня есть richtextbox, и я хотел бы заставить его работать как WordPad. Моя проблема заключается в том, что, например, если я набираю «123», используя шрифт Calibri, а затем «456» с использованием шрифта Arial, и я хочу изменить размер 2345, это не позволит мне сделать это, потому что у них есть два разные типы шрифтов. Здесь у меня есть проблема:Как изменить шрифт нескольких размеров в richtextbox на C#?

private void combo_sizes_TextChanged(object sender, EventArgs e) 
{ 
    if (rtb.SelectionFont == null) 
    { 
     rtb.SelectionFont = new Font(combo_fonts.Text, Convert.ToInt16(combo_sizes.Text)); 
    } 
    rtb.SelectionFont = new Font(rtb.SelectionFont.FontFamily, Convert.ToInt16(combo_sizes.Text)); 
} 

Я знаю ТНА, когда выбранный текст в RTB содержит несколько шрифтов SelectionFont равен NULL, так что в этом случае я сделал это, чтобы получить размер выбранного текстового в шрифт и из двух comboboxes, но я хотел бы изменить размер без потери его исходного шрифта. Есть ли решение?

Благодаря

ответ

0

Разбейте ваши selected text Into char с. Получите каждый шрифт char и измените его размер.

+0

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

+1

Никто не программист по рождению. :) Как вы практикуете, вы становитесь все более и более эффективными. Я обновлю свой ответ так просто, как только смогу. – Shaharyar

+0

WPF или Winform? – Shaharyar

0

Есть два встроенных шрифтов в RichTextBox (RTB):

  • Font является тот, который будет использоваться после того, как для любого входа. Поэтому, если вы хотите переключиться на другой шрифт, это то, что вы должны установить
  • SelectionFont однако шрифт текущего выбора. Это будет изменяться с помощью выбора, но оно также используется для set шрифт части текста, который уже был введен.

Но может быть только один из них одновременно. Если вы хотите вернуться к стандартному Фронту, вам нужно где-то сохранить стандартный шрифт.

Или вы можете хранить все шрифты, которые вы используете в списке, и можете предложить их в comboBox.

Обратите внимание, что:

  • Все форматирование после того, как текст был введен должен сделать можно выбрать часть, а затем изменить свойства этого выбора: шрифт, цвета, стили ..
  • После того, как любая часть текста была отформатирована каким-либо образом, вы не должны изменять текст непосредственно в своем коде, а используете только AppendText, Copy, Cut, Past, иначе вы испортите форматирование!

Ваш код может работать следующим образом:

public Form1() 
{ 
    InitializeComponent(); 

    lastSelectionFont = rtb.SelectionFont; 
    lastFont = rtb.Font; 
    //.. 

} 

Font lastSelectionFont; 
Font lastFont; 
private void richTextBox1_TextChanged(object sender, EventArgs e) 
{ 

    if (rtb.SelectionLength > 0) 
    { 
     lastSelectionFont = rtb.SelectionFont; 
     rtb.SelectionFont = new Font(rtb.SelectionFont.FontFamily, 
           Convert.ToInt16(combo_sizes.Text)); 
    } 
    else 
    { 
     lastFont = rtb.Font; 
     rtb.Font = new Font(rtb.Font.FontFamily, 
           Convert.ToInt16(combo_sizes.Text)); 
    } 
} 

Обратите внимание, что SelectionFont не будет нулевым ubnless вы установите его в нуль. Вероятно, вы столкнулись с проблемами, когда не было выбора.

Но опять же, я не уверен в ваших идеях «сохранения» предыдущего Форна. Подумайте о WordPad: он тоже не делает ничего подобного. Добавление всех шрифтов, которые вы используете в список шрифтов, возможно, даже с цветами theris, а красивые имена в качестве шрифта & стилей звучат очень привлекательно.

+0

Привет, спасибо за помощь. У меня возникла проблема при создании lastSelectionFont и lastFont, я получаю эту ошибку: «Инициализатор поля не может ссылаться на нестатическое поле, метод или свойство» –

+0

Да, мои выражения, относящиеся только к ошибкам, которые можно вычислить во время компиляции, могут быть назначены как I сделал. извините, я изменил код и перевел intitalization в конструктор формы. – TaW

+0

Почему вы создаете новый ComboBox? –

Смежные вопросы