Цель настоящей курсовой работы: разработать синтаксический анализатор, который позволит:
¨ Подсвечивать ключевые слова определенным цветом,
¨ Выводить контекстно-зависимый список с подмножеством ключевых слов (подсказок).
¨ Автоматически завершать начатое слово (AutoComplete), если пользователь осуществил выбор в этом списке.
Вы должны обеспечить возможность пользователю выбирать одно из нескольких множеств ключевых слов. Например, множество ключевых слов языка C# , или множество слов и выражений, которые часто используются в деловой переписке (см. выбор меню — Letters).
В качестве элемента управления, который будет выполнять роль редактора текста выберем RichTextBox. Вам придется создать новый элемент управления, основанный на нем. Поэтому:
¨ Создайте проект типа Windows Control Library с именем SyntaxBox. Результатом его компиляции будет динамическая библиотека (DLL).
¨ Переименуйте файл UserControl1.cs в SyntaxBox.cs и cогласитесь с предложением переименовать класс и файл с ресурсами. Измените тип базового класса, вместо UserControl задайте RichTextBox.
¨ Обратите внимание на то, что при этом меняется значок (иконка) файла. Теперь SyntaxBox — это компонент, то есть класс, который обладает специфическим поведением в режиме дизайна (таким же как и его родитель).
¨ Откройте файл SyntaxBox.Designer.cs и удалите из класса SyntaxBox все его содержимое (будьте осторожны, не из файла, а из класса), так как нам не понадобится контейнер компонентов и методы работы с ним: InitializeComponent и Dispose.
¨ В файле SyntaxBox.cs удалите вызов метода InitializeComponent.
Компонент SyntaxBox (DLL) предоставит возможность клиентам (EXE-приложениям) пользоваться своими услугами. Для этого они должны разместить SyntaxBox на поверхности формы и управлять свойствами компонента в окне свойств, отображаемого в режиме дизайна. Покажем, как это работает.
¨ Введите в класс SyntaxBox скрытую булевскую переменную caseSensitive и открытое свойство (get; set) с именем CaseSensitive. Для того, чтобы это свойство попало в определенную секцию окна свойств на этапе дизайна, пометьте его атрибутом [Category ("Syntax")].
Если вы, кроме того, добавите специальный комментарий (называемый IntelliSense-comment), то его текст будет помогать клентам в различных ситуациях на этапе разработки кода и дизайна формы. Комментарий должен иметь такой вид. Более сложные варианты IntelliSense-comment смотрите в MSDN.
/// <summary>
/// Get or Set the flag of case sensitivity. It is used in token recognition procedure
/// </summary>
¨ Постройте проект с компонентом SyntaxBox. Для этого выберите команду Build в его контекстном меню.
¨ Добавьте к решению еще один проект (команда Add►NewProjectв контекстном меню Solution)
¨ Новый проект должен иметь тип Windows Application. Присвойте ему имя — TestSyntaxBox.
¨ Сделайте новый проект стартовым (команда Set as StartUp Project в контекстном меню проекта).
Внимание. Порядок вставки элементов управления в форму главного окна важен. Если его нарушить, то могут быть проблемы с установкой свойства Dock (способа причаливания элементов к границам контейнеров). Заметьте, что сама форма является контейнером. Другими контейнерами являются: Panel, GroupBox, TabControl, и др.
¨ Переименуйте файл Form1 в MainForm. Согласитесь с предложением переименовать класс.
¨ Измените размеры формы, как показано на рисунке выше и положите на форму элемент типа ToolStrip.
¨ Вызовите для него мастер ToolStrip Tasks (с помощью специальной кнопки справа-вверху) и выберите команду Insert Standard Items.
¨ Добавьте в ToolStrip кнопку (с именем tbTopic) типа DropDownButton для выбора одного из множеств ключевых слов нашего редактора. Задайте свойства кнопки с выпадающим меню, а именно: коллекцию команд (DropDownItems) этого меню. На рисунке выше показано, как она может выглядеть.
¨ Создайте обработчики выбора команд выпадающего меню. Используйте технику двойного щелчка.
¨ Положите на форму наш компонент SyntaxBox. Установите его свойство Dock в положение Fill.
¨ В категории свойств (или группе) Syntax найдите свойство CaseSensitive. Установите его значение в True. Заметьте, что ни категории Syntax, ни свойства CaseSensitive в компоненте RichTextBox не было. Они появились в классе SyntaxBox в результате наших усилий.
Класс RichTextBox имеет свойство Text. Оно имеет тип string и дает доступ к массиву символов неразмеченного текста RTF-документа. Другое свойство класса RichTextBox — Rtf также имеет тип string и дает доступ к тексту разметки RTF-документа. Эти два текста (размеченный и неразмеченный) существуют параллельно. Анализируя один из них, можно изменять другой.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.