На этом шаге мы рассмотрим полный текст этого приложения.
Приведем полный текст программы MEdit, демонстрирующий использование компонентов MenuStrip, ToolStrip, ToolTip, OpenFileDialog, SaveFaleDialog, PrintDialog, FontDialog и HelpProvider, приведен ниже. Обратите внимание, в модуль формы надо вставить ссылку на пространство имен System::IO.
. . . . #include "Form2.h" . . . . using namespace System::IO; . . . . Form1(void) { InitializeComponent(); // //TODO: добавьте код конструктора // textBox1->ScrollBars = ScrollBars::Vertical; textBox1->Text = ""; this->Text = "MEdit - Новый документ"; // отобразить панель инструментов toolStrip1->Visible = true; toolStripMenuItem6->Checked = true; // назначаем файл справки helpProvider1->HelpNamespace = Application::StartupPath + "\\spyxx.chm"; // настройка компонента openDialog1 openFileDialog1->DefaultExt = "txt"; openFileDialog1->Filter = "Текст|*.txt"; openFileDialog1->Title = "Открыть документ"; openFileDialog1->Multiselect = false; // настройка компонента saveDialog1 saveFileDialog1->DefaultExt = "txt"; saveFileDialog1->Filter = "Текст|*.txt"; saveFileDialog1->Title = "Сохранить документ"; fn = String::Empty; textChanged = false; } . . . . private: String^ fn; // имя файла bool textChanged; // true - в текст внесены изменения // выбор в меню Файл команды Открыть private: System::Void toolStripMenuItem2_Click(System::Object^ sender, System::EventArgs^ e) { System::Windows::Forms::DialogResult dr; int r; r = SaveText(); // сохранить текст, находящийся в поле компонента if (r == 0) // если нечего сохранять... { openFileDialog1->FileName = String::Empty; // отобразить диалог Открыть dr = openFileDialog1->ShowDialog(); if (dr == System::Windows::Forms::DialogResult::OK) { fn = openFileDialog1->FileName; // отобразить имя файла в заголовке окна this->Text = fn; try { // считываем данные из файла System::IO::StreamReader^ sr = gcnew System::IO::StreamReader(fn); textBox1->Text = sr->ReadToEnd(); textBox1->SelectionStart = textBox1->TextLength; sr->Close(); textChanged = false; } catch ( System::IO::FileLoadException^ e) { MessageBox::Show("Ошибка:\n" + e->Message, "MEdit", MessageBoxButtons::OK, MessageBoxIcon::Error); } } } } // изменился текст в поле компонента textBox private: System::Void textBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) { textChanged = true; // текст изменен } // Записывает текст в файл. // Возвращает 0 или -1, если пользователь // в окне Сохранить нажмет кнопку Отмена private: int TextToFile() { System::Windows::Forms::DialogResult dr; int r = 0; if (fn == String::Empty) { // это новый документ // запросить у пользователя имя файла // отобразить диалог Сохранить dr = saveFileDialog1->ShowDialog(); if (dr == ystem::Windows::Forms::DialogResult::OK) { fn = saveFileDialog1->FileName; r = 0; } else // в окне Сохранить пользователь // сделал щелчок на кнопке Отмена r = -1; } // сохранить файл if ( r == 0) { try { // получим информацию о файле fn System::IO::FileInfo^ fi = gcnew System::IO::FileInfo(fn); // поток для записи System::IO::StreamWriter^ sw = fi->CreateText(); sw->Write(textBox1->Text); sw->Close(); // закрываем поток textChanged = false; r = 0; } catch ( System::IO::IOException^ e) { MessageBox::Show(e->ToString(),"NkEdit", MessageBoxButtons::OK, MessageBoxIcon::Error); } } return r; } // Проверяет, есть ли изменения в тексте и // сохраняет текст в файле. // Возвращает: // 0 или -1, если пользователь // отказался от выполнения операции (нажал Cancel) private: int SaveText() { System::Windows::Forms::DialogResult dr; int r; r = 0; if (textChanged) { dr = MessageBox::Show( "В текст внесены изменения. Сохранить измененный текст?", "MEdit", MessageBoxButtons::YesNoCancel, MessageBoxIcon::Warning); switch (dr) { case System::Windows::Forms::DialogResult::Yes: r = TextToFile(); break; case System::Windows::Forms::DialogResult::No: r = 0; break; case System::Windows::Forms::DialogResult::Cancel: r = -1; break; }; } return r; } // Создать документ private: void NewDocument() { int r; r = SaveText(); if ( r == 0) { this->Text = "Новый документ"; textBox1->Clear(); textChanged = false; fn = String::Empty; } } // Сохранить документ private: void SaveDocument() { int r; r = SaveText(); if ( r == 0) { this->Text = fn; textChanged = false; } } // выбор в меню Файл команды Создать private: System::Void toolStripMenuItem1_Click(System::Object^ sender, System::EventArgs^ e) { NewDocument(); } // выбор в меню Файл команды Сохранить private: System::Void toolStripMenuItem3_Click(System::Object^ sender, System::EventArgs^ e) { SaveDocument(); } // выбор в меню Файл команды Печать private: System::Void toolStripMenuItem4_Click(System::Object^ sender, System::EventArgs^ e) { printDialog1->ShowDialog(); } // выбор в меню Файл команды Выход private: System::Void toolStripMenuItem5_Click(System::Object^ sender, System::EventArgs^ e) { this->Close(); } // выбор в меню Параметры команды Панель инструментов private: System::Void toolStripMenuItem6_Click(System::Object^ sender, System::EventArgs^ e) { // отобразить/скрыть панель инструментов toolStrip1->Visible = ! toolStrip1->Visible; toolStripMenuItem6->Checked = ! toolStripMenuItem6->Checked; } // выбор в меню Параметры команды Шрифт private: System::Void toolStripMenuItem7_Click(System::Object^ sender, System::EventArgs^ e) { fontDialog1->Font = textBox1->Font; if (fontDialog1->ShowDialog() == System::Windows::Forms::DialogResult::OK) { textBox1->Font = fontDialog1->Font; } } // попытка закрыть окно программы private: System::Void Form1_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) { int r; r = SaveText(); if ( r != 0) { e->Cancel = true; } } // выбор в меню Справка команды О программе private: System::Void toolStripMenuItem9_Click(System::Object^ sender, System::EventArgs^ e) { // чтобы класс Form2 стал доступен, // в начало программы надо вставить // директиву >#include "Form2.h", // где Form2.h - модуль, в котором определен // класс Form2 Form2^ about = gcnew Form2(); about->ShowDialog(); } // выбор в меню Справка команды Справочная информация private: System::Void toolStripMenuItem8_Click(System::Object^ sender, System::EventArgs^ e) { // отображение chm-файла Help::ShowHelp(this, helpProvider1->HelpNamespace); }
На следующих шагах мы дадим краткий обзор использованных в данном приложении компонентов.
На следующем шаге мы рассмотрим компонент FontDialog.