Текстовый редактор
Для создания текстового редактора используется RichTextBox и MenuStrip
В Visual Studio для проектов в С++ в пункте File выбираем пункт New Project. В окне Project types выбираем CLR. В CLR выбираем Windows Forms Application. Задаем имя папки проекта и самого проекта.
В результате создается проект с окном формы Form1.
Интерфейс проекта
В Toolbox выбираем правой кнопкой мыши RichTextBox . Ставим курсор на поле Form1 и правой кнопкой мыши помещаем RichTextBox на форму. Затем также правой кнопкой мыши выбираем MenuStrip и помещаем на форму. Аналогично помещаем на форму OpenFileDialog и SaveFileDialog.
Для того, чтобы иметь возможность открыть файл в форму включается OpenFileDialog.
Для сохранения данных в файле и сохранения изменений в файле в форму включается
SaveFileDialog.
Для выполнения задания, которое заключается в обработке строк, считанных из
выбранного файла и отображенных в окне текстового редактора RichTextBox, включается второй RichTextBox.
Создание структуры меню.
После того, как меню помещено на форму в ее верхней строке появляется окно Type Here, в которое вписываем Файл – заголовок пуктов меню для работы с файлами. Одновременно сбоку и снизу автоматически создаются окна Type Here. В нижнем окне пишем Открыть (файл). Аналогично в нижнее окно под пунктом меню Открыть вписываем Сохранить, а под Сохранить – вписываем Закрыть (файл).
Создание обработчиков событий.
Можно изменить размер и тип шрифта пункта меню, выбрав в окне Propertes ( свойства).
Обработчики событий создаются системой автоматически – надо два раза «кликнуть» правой кнопкой мыши по пункту меню.
Кликнув по пункту Открыть автоматически осуществляется переход в файл Form1.h, где после #pragma endregion создаются следующие обработчики.
#pragma endregion
private:
System::Void открытьToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{
}
Кликнув по пункту Save автоматически осуществляется переход в файл Form1.h и создается следующий обработчик события – выбор пункта меню Сохранить.
private:
System::Void сохранитьToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
}
Если кликнуть по пункту Закрыть, то выполняется переход в файл Form1.h и создается обработчик события – выбор пункта меню Закрыть.
private:
System::Void закрытьToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) {
}
Созданные обработчики используем для выполнения работы с выбранными файлами:
- событие Открыть предназначено для вывода в окно редактора richTextBox1 содержимого выбранного файла; для этого из обработчика вызываем функцию LoadMyFile():
richTextBox1->Clear();//очищаем окно редактора
LoadMyFile();// вызываем функцию загрузки файла в окно редактора
flag = 0;
- событие Сохранить – сохраняет текст из окна редактора в выбранный с помощью SaveFileDialog файл:
SaveMyFile();
flag = 0;
- событие Закрыть – закрывает программу.
Для обеспечения сохранения изменений в тексте, необходимо обеспечить перехват события – TextChanged – текст изменен, это событие связывается в программе с изменением значения переменной flag с 0 на 1 в функции richTextBox1_TextChanged(); если текст был изменен и выполняется попытка закрыть программу, то на экране появляется всплывающее окно Error.
В обработчике проверяется значение переменной flag и осуществляется выход из программы с сохранением изменений или без сохранения в зависимости от выбора пользователя, который выбирает одну из трех кнопок: Да,Нет, Отмена.
private: System::Void закрытьToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e)
{
//если текст был изменен, то сохраняем его, иначе - выходим из программы
if(flag)
{
System::Windows::Forms::DialogResult result;
// Отображение MessageBox.
result = MessageBox::Show( this,"file changed.Save?","Error",
MessageBoxButtons::YesNoCancel,MessageBoxIcon::Error );
if (result==System::Windows::Forms::DialogResult::Yes )
SaveMyFile();
flag=0;//флаг сбрасывается, чтобы вывод MessageBox не
//повторялся при закрытии программы средствами окна
Application::Exit();//аналогично this->Close()
}
else this->Close();
}
- событие Работа создается для выполнения конкретных действий по обработке строк текста в окне первого редактора; результат выводится в окно второго редактора; из обработчика этого события вызывается функция working():
void working(void)
{
//функция берет из richTextBox1 i-ю строку и выводит
//во второе окно richTextBox2 строки содержащие подстроку – “ab”
int l=richTextBox1->Lines->Length;
for(int i=0;i<l;i++)
{
String^ s2 = "ab";// подстрока - ab
bool b;
// i-я строка richTextBox1
String ^s1 = richTextBox1->Lines[i];
// если строка s1 содержит подстроку s2, то добавляем эту строку s1 в //richTextBox2 с помощью метода AppendText
// при этом к строке s1 добавляем пробел, а в конец строки добавляем символ //конца строки c помощью метода Concat
if ( b = s1->Contains( s2 ))
richTextBox2->AppendText(String::Concat(String::Concat( " ", s1 ),"\n"));
}
}
MessageBox
Пользователь может создать свой новый экземпляр MessageBox. Для вывода message box ( буквально – ящик сообщения ) вызывается статический метод класса MessageBox..::.Show. Заголовок, выводимое в окне сообщение, кнопки и иконка определяются соответствующими параметрами метода. В этом окне может быть выведено от одной до трех кнопок. Например, две кнопки – Да, Нет - задаются следующим образом:
MessageBoxButtons buttons = MessageBoxButtons::YesNo;
В следующем примере показан вызов MessageBox со следующими параметрами:
- сообщение - "You must enter a name.";
- заголовок - "Name Entry Error";
- кнопки - MessageBoxButtons::OK;
- иконка - MessageBoxIcon::Exclamation.
private:
void button1_Click( Object^ sender, System::EventArgs^ e )
{
if ( textBox1->Text->Equals( "" ) )
{
MessageBox::Show( "You must enter a name.", "Name Entry Error",
MessageBoxButtons::OK, MessageBoxIcon::Exclamation );
}
else
{
// Code to act on the data entered would go here.
}
}
Для выбора действий, соответствующих выбранной кнопке, анализируется значение, которое возвращает метод Show. Возвращемое значение имеет следующее объявление:
System::Windows::Forms::DialogResult result;
Рисунку соответсвует следующий вызов:
result = MessageBox::Show( this,"file changed.Save?","Error",
MessageBoxButtons::YesNoCancel,MessageBoxIcon::Error );
Возвращаемое значение анализируется оператором if:
if (result==System::Windows::Forms::DialogResult::Yes )
SaveMyFile();
Если результат эквивалентен Yes, то вызывается функция SaveMyFile();