Усовершенствованный текстовый редактор
Поставим задачу создать на основе поля RichTextBox усовершенствованный текстовый редактор. Внешний вид его вы можете видеть на Рис. 20.6.
Рис. 20.6
Большое прямоугольное поле на форме – это и есть RichTextBox. Вы вводите в него вручную любой текст и форматируете его, то есть изменяете его внешний вид. Чтобы отформатировать фрагмент текста, вы его, как принято в текстовых редакторах, сначала выделяете, а затем нажимаете одну из шести кнопок в окне редактора, а именно:
Кнопка Настроить шрифт вызывает диалоговое окно настройки шрифта, после чего предварительно выделенный в текстовом поле фрагмент текста форматируется выбранным шрифтом.
Смысл кнопок Налево, По центру, Направо ясен из текста в поле RichTextBox на рисунке.
Кнопки Поставить и Снять ставят и снимают маркеры перед строкой. У нас на рисунке маркеры – это, круглые пятна перед «яблоками и мандаринами».
Кнопки Открыть документ и Сохранить документ вызывают диалоговые окна открытия и сохранения файла.
Счетчик Масштаб управляет приближением содержимого текстового поля к нашим глазам.
Кнопка Кнопка будет объяснена чуть позже.
Конечно, в текстовых редакторах элементов управления побольше, но для понимания работы RichTextBox хватит и этих. Конечно, все эти кнопки просятся в меню или на панель инструментов (о которой речь позже), но я сделал как попроще. Меню вы можете сделать и сами.
Создайте проект. Поместите на форму нужные кнопки, метки, счетчик NumericUpDown. Поместите на форму элемент управления RichTextBox и для краткости переименуйте его в RTB. Поместите в проект диалоговые окна открытия, сохранения файла, настройки шрифта.
Вот программа:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
RTB.HideSelection
= False 'Чтобы выделение не снималось с фрагмента при уходе фокуса с поля
End Sub
Private Sub Открыть_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Открыть.Click
OpenFileDialog1.Filter = "RTF-файлы|*.RTF"
If OpenFileDialog1.ShowDialog() = DialogResult.Cancel Then Exit Sub
Dim Файл As String = OpenFileDialog1.FileName
RTB.LoadFile(Файл)
End Sub
Private Sub Сохран_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Сохран.Click
SaveFileDialog1.Filter = "RTF-файлы|*.RTF"
If SaveFileDialog1.ShowDialog() = DialogResult.Cancel Then Exit Sub
Dim Файл As String = SaveFileDialog1.FileName
RTB.SaveFile(Файл)
End Sub
Private Sub Настр_шр(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Настр_шр.Click
FontDialog1.ShowColor = True 'Предоставить возможность выбирать цвет шрифта
FontDialog1.ShowDialog() 'Показать диалоговое окно настройки шрифта
' Присвоить выделенному фрагменту шрифт, выбранный в диалоговом окне:
RTB.SelectionFont = FontDialog1.Font
'Присвоить выделенному фрагменту цвет шрифта, выбранный в диалоговом окне:
RTB.SelectionColor = FontDialog1.Color
End Sub
Private Sub Налево_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Налево.Click
RTB.SelectionAlignment = HorizontalAlignment.Left
End Sub
Private Sub По_центру(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles По_центру.Click
RTB.SelectionAlignment
= HorizontalAlignment.Center
End Sub
Private Sub Направо_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Направо.Click
RTB.SelectionAlignment
= HorizontalAlignment.Right
End Sub
Private Sub Поставить(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Поставить.Click
RTB.SelectionBullet = True
End Sub
Private Sub Снять_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Снять.Click
RTB.SelectionBullet
= False
End Sub
Private Sub NumericUpDown1_ValueChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) _
Handles NumericUpDown1.ValueChanged
RTB.ZoomFactor
= NumericUpDown1.Value
End Sub
Пояснения: Рассмотрим процедуры по порядку сверху вниз.
Объект RichTextBox обладает большим количеством свойств и методов, которые и обуславливают богатство его возможностей. Начнем со свойства HideSelection, которое устанавливается в процедуре Form1_Load: Когда мы выделяем в поле темным цветом фрагмент текста, чтобы отформатировать его, а затем уходим из поля к соответствующей нашим желаниям кнопке, с уходом фокуса из поля исчезает и темный цвет выделения. Само выделение, правда, не исчезает и форматирование проходит нормально, но вот что именно было выделено, мы не видим. Это непривычно и неудобно. Чтобы темный цвет не исчезал, мы пишем в процедуре Form1_Load:
RTB.HideSelection = False 'Чтобы выделение не снималось с фрагмента при уходе фокуса с поля
Перейдем к процедурам открытия и сохранения документа. RichTextBox сохраняет свой текст в так называемом RTF-файле, который не является обычным текстовым файлом, поэтому работать с ним мы не умеем. Однако, у объекта RichTextBox имеются методы LoadFile и SaveFile. Первый целиком загружает документ из файла в поле RichTextBox, а второй целиком сохраняет содержимое поля RichTextBox в файле. А нам больше и не надо.
Перейдем к следующим 6 процедурам, которые соответствуют 6 кнопкам форматирования в нашем проекте. Все они имеют дело со свойствами объекта RichTextBox, начинающимися на Selection…. При изменении значения этих свойств мы меняем формат (вид) выделенного фрагмента текста. Например, изменение свойства SelectionColor приводит к изменению цвета выделенного фрагмента текста.
В последней процедуре мы при помощи счетчика NumericUpDown меняем значение свойства ZoomFactor. Это свойство «приближает к глазам» содержимое поля RichTextBox или «удаляет его от глаз». Чем больше значение счетчика, тем ближе к глазам. В Microsoft Word этим занимается инструмент «Масштаб». Но наш простой инструмент работает хуже, потому что «заворачивает» текст, «уткнувшийся» в правую границу поля, на следующую строку.