Читайте также:
|
|
Для создания текстового редактора используется 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();
Объект RichTextBox
Объект формы richTextBox типа ^rich_string
имеет свойство Lines, которое является массивом стрингов. Это видно в окне Properties в строке Lines – String[] Array, как видно на рисунке.
При разработке программы доступ к свойству осуществляется через оператор ->, при этом список свойств может быть выбран в выпадающем окне, как показано на слудующем рисунке:
Редактор текста типа RTF работает со строками типа String, который представляет текст, как последовательность символов. В следующй таблице приведены некоторые методы класса String.
Методы
Название | Описание | |
Compare | Перегрузка. Сравнивает два указанных объекта String (objects). public:static int Compare(String^ strA, String^ strB) | |
Concat | Перегрузка. Объединяет одну или более заданных строк (String). public:static String^ Concat(String^ str0, String^ str1) | |
Contains | Возвращает значение, величина которого указывает включает ли строка заданную подстроку или нет. // Пример демонстрирует метод String.Contains() using namespace System;int main(){ String^ s1 = "The quick brown fox jumps over the lazy dog"; String^ s2 = "fox"; bool b; b = s1->Contains(s2); Console::WriteLine("Is the string, s2, in the string, s1?: {0}", b); } | |
Copy | Создает новое значение для String с тем же значение, заданным String. public:static String^ Copy(String^ str) | |
CopyTo | Копирует заданное число символов начиная с заданной позиции в указанную позицию в массиве символов Unicode. public:void CopyTo(int sourceIndex, array<wchar_t>^ destination, int destinationIndex, int count) | |
Equals | Overloaded. Determines whether two String objects have the same value. public:virtual bool Equals(String^ value) sealed | |
IndexOf | Возвращает индекс первого вхождения в стринг String одного или более символов в пределах стринга (string). public:int IndexOf(String^ value) | |
Insert | Включает заданную строку String, начиная с указанного индекса. public:String^ Insert(int startIndex, String^ value) | |
Join | Overloaded. Concatenates a specified separator String between each element of a specified String array, yielding a single concatenated string. | |
LastIndexOf | Overloaded. Reports the index position of the last occurrence of a specified Unicode character or String within this instance. | |
Normalize | Overloaded. Returns a new string whose binary representation is in a particular Unicode normalization form. public: String^ Normalize() | |
Remove | Overloaded. Удаляет заданное количество символов из заданной строки, начиная с заданного номера символа – индекса. public:String^ Remove(int startIndex, int count) | |
Replace | Overloaded. Заменяет все вхождения заданного Unicode символа или стринга String в примере другим заданным символом или стрингом. public:String^ Replace(wchar_t oldChar, wchar_t newChar)public:String^ Replace(String^ oldValue, String^ newValue) | |
Substring | Overloaded. Возвращает подстроку, начиная с указанной позиции. public: String^ Substring(int startIndex) | |
ToCharArray | Overloaded. Копирует символы из строки в массив Unicode символов. public:array<wchar_t>^ ToCharArray() public:array<wchar_t>^ ToCharArray(int startIndex, int length) | |
ToLower | Overloaded. Возвращает копию стринга String, в которой все символы преобразованны в строчные – lowercase. | |
ToString | Overloaded. Converts the value of this instance to a String. public:virtual String^ ToString() override | |
ToUpper | Overloaded. Возвращает стринг String, в котором символы преобразованы в заглавные - uppercase. |
Дата добавления: 2015-10-21; просмотров: 97 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Глава 4. Рисунки | | | Свойства |