Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Текстовый редактор.doc
Скачиваний:
45
Добавлен:
09.02.2015
Размер:
4.27 Mб
Скачать

Текстовый редактор

Для создания текстового редактора используется 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();