18c0693f

Усовершенствованный текстовый редактор


Поставим задачу создать на основе поля 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 этим занимается инструмент «Масштаб». Но наш простой инструмент работает хуже, потому что «заворачивает» текст, «уткнувшийся» в правую границу поля, на следующую строку.




Все публикации раздела