ПОНЯТНО О Visual Basic NET (том 3)

       

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


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


Содержание раздела