Меню Рубрики

Windows forms c текстовый редактор

Windows forms c текстовый редактор

Уроки Windows Forms C++/C#

Открытие и запись текстового файла в MVS C++

В этом уроке будет показан пример создания простого текстового редактора, поэтому обязательно посмотрите предыдущий урок. В данной программе мы будем открывать какой-то уже созданный текстовый файл и редактировать его или же сами писать текст и сохранять его, как новый текстовый файл в нужную вам папку. Ещё один явный признак текстового редактора – это если вы что-то написали и нажимайте крестик чтобы выйти – при этом программа спрашивает: “Сохранить изменения”. Создание такого текстового редактора как раз и будет рассматриваться в этом уроке. Для этого понадобяться следующие элементы: «MenuStrip», «textBox», «openFiledialog», «saveFiledialog». Работа с последними двумя рассматривается в “этом уроке”. Перетащите все эти элементы на форму, назовите заголовок «MenuStrip» «Файл» создайте в нём три пункта: «Открыть», «Сохранить как», «Выход», привяжите «textBox» ко всем сторонам формы, если не знаете включите «Multeline» и «ScrollBars->Vertical», как делать всё выше описанное посмотрите этот урок.Оформление программы:

В коде программы будут созданы «MyReader» и «MyWriter» , с помощью которых программа будет читать и записывать текст в файл. По мимо этого в коде создаётся кодировка, благодаря которой программа будет понимать русский текст. У формы нужно вызвать событие «FormClousing», о том как вызвать событие у элемента рассказывается в этом уроке. Код программы:

#pragma endregion private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) < this->Text = «Текстовый редактор»; openFileDialog1->FileName = «D:\\ВУЗ\\Text2.txt»; openFileDialog1->Filter = «Текстовые файлы (*.txt)|*.txt|All files (*.*)|*.*»; saveFileDialog1->Filter = «Текстовые файлы (*.txt)|*.txt|All files (*.*)|*.*»; > private: System::Void открытьToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) < openFileDialog1->ShowDialog(); if (openFileDialog1->FileName == nullptr) return; try < auto MyReader = gcnew IO::StreamReader(openFileDialog1->FileName, System::Text::Encoding::GetEncoding(1251)); textBox1->Text= MyReader->ReadToEnd(); MyReader->Close(); > catch (IO::FileNotFoundException^ Ситуация) < MessageBox::Show(Ситуация->Message + «\nФайл не найден», «Ошибка», MessageBoxButtons::OK, MessageBoxIcon::Exclamation); > catch (Exception^ Ситуация) < MessageBox::Show(Ситуация->Message, «Ошибка», MessageBoxButtons::OK, MessageBoxIcon::Exclamation); > > private: System::Void сохранитьКакToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) < saveFileDialog1->FileName = openFileDialog1->FileName; if (saveFileDialog1->ShowDialog() == Windows::Forms::DialogResult::OK) Save(); > void Save() < try < // Создание экземпляра StreamWriter для записи в файл: auto MyWriter = gcnew IO::StreamWriter(saveFileDialog1->FileName, false, System::Text::Encoding::GetEncoding(1251)); MyWriter->Write(textBox1->Text); MyWriter->Close(); textBox1->Modified = false; > catch (Exception^ Ситуация) < MessageBox::Show(Ситуация->Message, «Ошибка», MessageBoxButtons::OK, MessageBoxIcon::Exclamation); > > private: System::Void выходToolStripMenuItem_Click(System::Object^ sender, System::EventArgs^ e) < this->Close(); > private: System::Void Form1_FormClosing(System::Object^ sender, System::Windows::Forms::FormClosingEventArgs^ e) < if (textBox1->Modified == false) return; auto MeBox = MessageBox::Show(«Текст был изменён. \nСохранить изменения?», «Простой редактор», MessageBoxButtons::YesNoCancel, MessageBoxIcon::Exclamation); if (MeBox == Windows::Forms::DialogResult::No) return; if (MeBox == Windows::Forms::DialogResult::Cancel) e->Cancel = true; if (MeBox == Windows::Forms::DialogResult::Yes) < if (saveFileDialog1->ShowDialog() == Windows::Forms::DialogResult::OK) < Save(); return; >else e->Cancel = true; > > >; >

Результат: Следующий урок >>

Источник

Windows forms c текстовый редактор

БлогNot. Visual C++: пишем простой многодокументный редактор текста RTF

Visual C++: пишем простой многодокументный редактор текста RTF

То есть, MDI-приложение. Пример вот отсюда как-то мне не очень нравится, потому что написан левой ногой и не использует стандартные возможности по управлению дочерними окнами. Этот пример тоже, в общем, пишется левой ногой и прямо сейчас, но постараемся сделать хотя бы классическую картинку «много окон документов внутри главного окна приложения».

В 2015-й (или выше) Visual Studio создадим приложение Windows Forms на C++.

На форму приложения перетащим главное меню MenuStrip и стандартные диалоги для работы с файлами OpenFileDialog, SaveFileDialog. У диалогов достаточно настроить свойство Filter на нужный нам тип файлов, с которым будем работать, выберем » Файлы RTF|*.rtf «.

В меню предусмотрим несколько пунктов, которые покажут разные возможности работы с файлами, текстом в дочерних окнах и самими окнами:

Также не забудем установить родительской форме свойство IsMdiContainer = true.

Затем добавим к приложению ещё одну форму (меню Проект — Добавить новый элемент — Viual C++ — UI — Форма Windows Forms). У меня она назвалась MyForm1 , пусть так и остаётся.

Настроим новую форму, перетащив на неё какое-нибудь многострочное текстовое поле, например, стандартный RichTextBox и установив у него в окне Свойств размер во всю область дочернего окна (свойство Dock = Fill).

В дочернее окно добавим также контекстное меню contextMenuStrip1, которое будет вызываться правой кнопкой мыши. Предусмотрим там 4 пункта (Вырезать, Копировать, Копировать все, Вставить). Это позволит приложению обмениваться кусками текста между окнами через системный Буфер Обмена. Сначала все пункты отключены (свойство Enabled = false).

Это меню укажем в свойстве ContextMenuStrip компоненты richTextBox1.

Добавим в дочернее окно его собственный SaveFileDialog, чтобы можно было выбрать имя файла для сохранения, если мы закрываем дочернее окно с изменённым текстом. На диалог поставим такой же фильтр, как у родительской формы. Вообще, конечно, лучше было бы не плодить компоненты, а воспользоваться неким отдельным классом-наследником SaveFileDialog, который мы могли написать.

Теперь дочернюю форму мы пропишем вверху файла родительской формы MyForm.h :

а весь остальной код как обычно писать в MyForm.h под директивой #pragma endregion :

Мы уже умеем создавать обработчики событий двойным кликом из списка событий в окне «Свойства», так что приведу только «внутренности» функций-обработчиков стандартных событий.

По выбору пункта меню «Создать» просто вызовем только что написанный метод:

Пункт «Выход» запрограммировать тоже просто, будем вызывать стандартный метод закрытия главной формы:

Для записи файла, имя которого было введено или выбрано в стандартном диалоге сохранения, напишем обработчик пункта меню «Сохранить. «:

Здесь также видно, как обратиться к активному в настоящий момент дочернему окну или отследить ситуацию, при которой такого окна нет.

Пункт верхнего меню «Открыть. » будет выполнять довольно похожую работу — определять, есть ли активное дочернее окно, получать для него имя файла и выводить стандартный диалог открытия, после чего попытается сделать непосредственно загрузку из файла содержимого:

Удобство MDI-приложения в том, что при закрытии главного окна обработчки события FormClosing дочерних окон будут вызваны автоматически, так что каждому экземпляру дочернего окна достаточно будет позаботиться о сохранности только своего текста из своего RichTextBox.

При этом, отказ от сохранения какого-либо из текстов в дочерних окнах не будет означать отказа от закрытия приложения.

Ниже приведён обработчик события FormClosing главной формы. Комментарием показано, как можно было бы обойти в цикле все дочерние окна.

Если последний оператор закомментировать, нажатие кнопки «Отмена» в ответ на предложение сохранить любой из несохранённых файлов будет отменять и закрытие родительского окна.

Выбор пункта меню «Дата и время» вставит в конец текста активного окна текущие дату и время, примерно как в стандартном Блокнотике Windows (только там — в место расположения курсора). Эта функция добавлена просто для иллюстрации:

Наконец, пункт «Каскад» уложит каскадом имеющиеся дочерние окна, по аналогии легко сделать остальные стандартные «Укладки»:

Напишем что-нибудь в файле MyForm1.h , программируя функционал дочерних окон. Весь код будет располагаться после директивы #pragma endregion

Во-первых, позаботимся о том, чтобы пункты контекстного меню были доступны только тогда, когда они нужны.

Метод checkForClipboardFormat будет проверять, что находится в Буфере Обмена и разрешать вставлять только RTF:

Мы вызовем его в обрабтчике события загрузки (Load) дочерней формы:

Также напишем для richTextBox1 обработчики событий SelectionChanged (изменение выбора текста)

и TextChanged (изменение самого текста), имеющие схожие цели.

Пункт меню «Вырезать» будет программировать просто:

«Копировать все» тоже:

А вот обработчик пункта «Вставить» будет дополнительно проверять, есть ли в системном Буфере данные подходящего формата и не выделено ли что-то в тексте из richTextBox1:

Перед закрытием формы в обработчике события FormClosing нам придётся запросить у пользователя сохранение файла, если оно требуется, и дать ему возможность сохранить изменения, отказаться от сохранения или отменить закрытие окна:

Проект собирается. Теперь можно добавить в главное окно, например, панель инструментов с кнопками для изменения цвета, размера шрифта и т.п., что обычно бывает в текстовых редакторах.

Скачать архив .zip с папкой этого проекта Visual Studio 2015 (12 Кб)

В простейшем случае, добавив и настроив toolStripContainer , а на нём кнопку » B » (выделение жирным), мы можем написать примерно такой код для переключения шрифта контрола активного окна между жирным и обычным (обработка щелчка по кнопке):

25.09.2018, 18:06; рейтинг: 2399

Источник

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

Как известно, одной из сильных сторон приложений MS Office и OpenOffice является поддержка макросов. То есть в приложения можно добавлять свой ограниченный функционал в виде кода на определенном языке, который выполняется в приложении. Нечто похожее можно совершить и с нашими NET-приложениями. Благодаря классам CodeCompiler и CSharpCodeProvider мы можем компилировать приложения на лету и посредством некоторых логических действий связывать их с нашими приложениями

Создадим простейший текстовый редактор. И добавим в него поддержку макросов. Графически наш текстовый редактор будет состоять из компонента RichTextBox и меню, в котором будет два пункта — File и Macros. В пункте меню File будут подпункты Open, Save и Exit, с помощью которых мы будем сохранять и загружать файлы. А в пункте Macros будут два подпункта — Run Macro и Add Accembly. Run Macro будет запускать макрос на выполнение, а пункт Add Accembly будет добавлять в макрос ссылку на сборку (как это собственно мы делаем с проектом в Visual Studio). Код приложения будет выглядеть следующим образом:

Чтобы создать макрос, наберите код макроса в текстовом поле или в любом другом текстовом редакторе. Программа макроса идентична любой другой программе на C# за исключением следующий моментов: После секции импортированных пространств имен идет основной класс программы. Он должен носить имя Program, главный метод которого должен носить имя Main и принимать единственный параметр — RichTextBox. Обратите внимание на строчку Type t = (Type)obj.GetType().InvokeMember(«Main», BindingFlags.InvokeMethod, null, obj, args); . Здесь Main — это и есть вызываемый метод в классе, который был скомпилирован в объект obj . Причем так как c# — язык регистрозависимый, то название метода тут и в макросе должно совпадать по регистру.

Теперь создадим макрос, где мы попробуем отследить количество слов «string» и «new» в этом же макросе. Конечно, необязательно передавать в качестве параметра RichTextBox, это мы делаем для того, чтобы обеспечить связь с нашим приложением, набор же параметров может быть любой:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Windows forms c игра
  • Windows forms c datagridview
  • Windows forms button click
  • Windows format fat32 windows 7
  • Windows form c учебник