Разработка текстового редактора с поддержкой многодокументного интерфейса.
Заказать уникальную курсовую работу- 40 40 страниц
- 9 + 9 источников
- Добавлена 05.07.2023
- Содержание
- Часть работы
- Список литературы
1 Анализ предметной области 4
1.1 Назначение текстовых редакторов 4
1.2 Обзор аналогов разрабатываемого приложения 4
1.3 Постановка задачи 6
2 Описание разработанного приложения 7
2.1 Выбор средств разработки 7
2.1.1 Язык программирования высокого уровня С# 8
2.1.2 Особенности среды разработки 9
2.2 Использованные компоненты 11
2.3 Модули программы 12
2.4 Реализация приложения 13
3 Руководство программиста 18
3.1 Набор тестов, проведенных при приложения 20
4 Руководство пользователя 22
Заключение 27
Список использованных источников 28
Приложение 1 29
Text;if (openFileDialog1.ShowDialog() == DialogResult.OK) {if (openFileDialog1.FileName == null) return;try {//если файл выбран в диалоговом окне открытия,//загружаем его в RichTextBox активного дочернего окнаtheBox.LoadFile(openFileDialog1.FileName);theBox.Modified = false;tlSBtnFont.Text = theBox.Font.Name;tlSBtnSize.Text = theBox.Font.Size.ToString(); }catch (Exception ex){ // ОтчетобошибкахMessageBox.Show(ex.Message, "Ошибка",MessageBoxButtons.OK, MessageBoxIcon.Exclamation); }activeChild.Text = openFileDialog1.FileName; } } }privatevoidвырезатьToolStripMenuItem_Click(object sender, EventArgs e) { Form activeChild = this.ActiveMdiChild;if (activeChild != null) {try {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {// вырезаем выделенное в буфер. if (theBox.SelectionLength > 0) theBox.Cut();} }catch {MessageBox.Show("Нет выделения в тексте"); } }else {MessageBox.Show("Не выбрано ни одно окно");} }privatevoidкопироватьToolStripMenuItem_Click(object sender, EventArgs e) { Form activeChild = this.ActiveMdiChild;if (activeChild != null) {try {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {// копируем выделенное в буфер. if (theBox.SelectionLength > 0) theBox.Copy();} }catch {MessageBox.Show("Нет выделения в тексте"); } }else {MessageBox.Show("Не выбрано ни одно окно");} }privatevoidвставитьToolStripMenuItem_Click(object sender, EventArgs e) { Form activeChild = this.ActiveMdiChild;if (activeChild != null) {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Rtf)) {if (theBox.SelectionLength > 0) //Еслибуфернепуст{ //И в тексте выделен фрагмент,//то узнаем, как вставлять - поверх выделенного фрагмента или в конец?if (MessageBox.Show("Вставить поверх выделения?", "Сообщение",MessageBoxButtons.YesNo) == DialogResult.No)theBox.SelectionStart = theBox.Text.Length; }theBox.Paste(); } }else {MessageBox.Show("Невыбранониодноокно");} }privatevoidкопироватьВсёToolStripMenuItem_Click(object sender, EventArgs e) { Form activeChild = this.ActiveMdiChild;if (activeChild != null){try {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {// выделяем весь документ и копируем выделенное в буфер. theBox.SelectAll();theBox.Copy();theBox.DeselectAll();} }catch {MessageBox.Show("Нет выделения в тексте"); } }else {MessageBox.Show("Не выбрано ни одно окно");} }privatevoidchangeStyle(FontStyle style) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {activeChild.changeStyle(style); } }privatevoidchangeSize(float _size) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {activeChild.changeSize(_size); } }privatevoidchangeFont(string _name) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {activeChild.changeFont(_name);}}privatevoidtlSBtnBold_Click(object sender, EventArgs e) {changeStyle(FontStyle.Bold); }privatevoidtlSBtnItalic_Click(object sender, EventArgs e) {changeStyle(FontStyle.Italic); }privatevoidtlSBtnUnderline_Click(object sender, EventArgs e) {changeStyle(FontStyle.Underline); }privatevoidtlSBtnSize_SelectedIndexChanged(object sender, EventArgs e) {changeSize((float)Convert.ToDouble(tlSBtnSize.Text)); }privatevoidtlSBtnSize_KeyPress(object sender, KeyPressEventArgs e) {changeSize((float)Convert.ToDouble(tlSBtnSize.Text)); }privatevoidповторитьToolStripMenuItem_Click(object sender, EventArgs e) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {// если какая-то операция выполняласьif (theBox.CanRedo == true) {// повторяем всё, кроме удаления текстаif (theBox.RedoActionName != "Delete")theBox.Redo();float _size = theBox.SelectionFont.Size;tlSBtnSize.Text = Convert.ToString(_size);tlSBtnFont.Text = theBox.SelectionFont.Name;} } }else {MessageBox.Show("Не выбрано ни одно окно");} }privatevoidотменитьToolStripMenuItem_Click(object sender, EventArgs e) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {// если какая-то операция выполняласьif (theBox.CanUndo == true) {// отменяемtheBox.Undo();//theBox.ClearUndo(); }float _size = theBox.SelectionFont.Size;tlSBtnSize.Text = Convert.ToString(_size);tlSBtnFont.Text = theBox.SelectionFont.Name;} }else {MessageBox.Show("Не выбрано ни одно окно");} }privatevoidкаскадToolStripMenuItem_Click(object sender, EventArgs e) {this.LayoutMdi(MdiLayout.Cascade); //Выстроитьдочерниеокнакаскадом }privatevoidмозаикаСверхуВнизToolStripMenuItem_Click(object sender, EventArgs e) {this.LayoutMdi(MdiLayout.TileHorizontal); //Мозаикасверхувниз }privatevoidмозаикаСлеваНаправоToolStripMenuItem_Click(object sender, EventArgs e) {this.LayoutMdi(MdiLayout.TileVertical); //Мозаикаслеванаправо }privatevoidtlSBtnSizeUp_Click(object sender, EventArgs e) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {try {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {float _size = theBox.SelectionFont.Size + 1;tlSBtnSize.Text = Convert.ToString(_size);changeSize(_size); } }catch {MessageBox.Show("Нетвыделениявтексте");} }else {MessageBox.Show("Не выбрано ни одно окно");} }privatevoidtlSBtnSizeDown_Click(object sender, EventArgs e) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {try {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {float _size = theBox.SelectionFont.Size - 1;tlSBtnSize.Text = Convert.ToString(_size);changeSize(_size); } }catch {MessageBox.Show("Нетвыделениявтексте");} }else {MessageBox.Show("Не выбрано ни одно окно");} }privatevoidtlSBtnFont_Click(object sender, EventArgs e) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {try {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {stringfName = tlSBtnFont.Text;//float _size = theBox.SelectionFont.Size; changeFont(fName); } }catch {MessageBox.Show("Нетвыделениявтексте");} }else {MessageBox.Show("Не выбрано ни одно окно");} }privatevoidtlSBtnFont_SelectedIndexChanged(object sender, EventArgs e) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {try {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {stringfName = tlSBtnFont.Text;changeFont(fName); } }catch {MessageBox.Show("Нетвыделениявтексте");} } }privatevoidfrmTRMain_MdiChildActivate(object sender, EventArgs e) {if (this.ActiveMdiChild != null) {try {RichTextBoxtheBox = (RichTextBox)this.ActiveMdiChild.ActiveControl;if (theBox != null) {float _size = theBox.SelectionFont.Size;tlSBtnFont.SelectedIndex = tlSBtnFont.Items.IndexOf(theBox.SelectionFont.Name);tlSBtnSize.Text = _size.ToString();changeSize(_size); } }catch { } } }publicvoidchangeButtons(int[] states) {tlSBtnBold.Checked = (states[0] != 0 ? true : false);tlSBtnItalic.Checked = (states[1] != 0 ? true : false);tlSBtnUnderline.Checked = (states[2] != 0 ? true : false);}privatevoidоПрограммеToolStripMenuItem_Click(object sender, EventArgs e){MessageBox.Show("Многооконный текстовый редактор\nВерсия 1.0");}privatevoidtlSBtnCenter_Click(object sender, EventArgs e) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {theBox.SelectionAlignment = HorizontalAlignment.Center;} }else {MessageBox.Show("Не выбрано ни одно окно");} }privatevoidtlSBtnLeft_Click(object sender, EventArgs e) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {theBox.SelectionAlignment = HorizontalAlignment.Left;} }else {MessageBox.Show("Не выбрано ни одно окно"); } }privatevoidtlSBtnRight_Click(object sender, EventArgs e) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {theBox.SelectionAlignment = HorizontalAlignment.Right;} }else {MessageBox.Show("Не выбрано ни одно окно");} }privatevoidmaintoolStrip_Click(object sender, EventArgs e) { }privatevoidtlSBtnImage_Click(object sender, EventArgs e) {frmEditactiveChild = this.ActiveMdiChildasfrmEdit;if (activeChild != null) {RichTextBoxtheBox = (RichTextBox)activeChild.ActiveControl;if (theBox != null) {IDataObjectolddata;using (OpenFileDialogofd = newOpenFileDialog()) {ofd.Filter = "Image Files(*.jpg; *.jpeg; *.gif; *.png; *.bmp)|*.jpg; *.jpeg; *.gif; *.png; *.bmp";if (ofd.ShowDialog() == DialogResult.OK) {olddata = Clipboard.GetDataObject();Clipboard.SetImage(Image.FromFile(ofd.FileName));theBox.Paste();Clipboard.SetDataObject(olddata);} } } }else {MessageBox.Show("Не выбрано ни одно окно");} }privatevoidfrmTRMain_FormClosing(object sender, FormClosingEventArgs e){//Для MDI-приложений метод сам вызовет FormClosing потомковe.Cancel = false; } }}using System;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows.Forms;namespaceTextEditorApp{publicpartialclassfrmEdit : Form { publicfrmEdit() {InitializeComponent(); }privatevoidcheckForClipboardFormat() {if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Rtf))contextMenuStrip1.Items[2].Enabled = true; //ВключитьпунктВставитьelse contextMenuStrip1.Items[2].Enabled = false;frmTRMain parent = this.MdiParentasfrmTRMain;if (parent != null) {int[] states = newint[] { (int)richTextBox1.SelectionFont.Style & (int)FontStyle.Bold, (int)richTextBox1.SelectionFont.Style & (int)FontStyle.Italic, (int)richTextBox1.SelectionFont.Style & (int)FontStyle.Underline };parent.changeButtons(states); } }privatevoidfrmEdit_Activated(object sender, EventArgs e) {checkForClipboardFormat(); }privatevoid richTextBox1_SelectionChanged(object sender, EventArgs e){//если в документе ничего не выделено, то делаем недоступными пункты// Вырезать, Копировать контекстного меню//иначе делаем их доступнымиif (richTextBox1.SelectionLength == 0) {for (inti = 0; i < 2; i++) contextMenuStrip1.Items[i].Enabled = false;contextMenuStrip1.Items[4].Enabled = false; }else { for (inti = 0; i < 2; i++) contextMenuStrip1.Items[i].Enabled = true;contextMenuStrip1.Items[4].Enabled = true; }//ВключитьВырезать, КопироватьcheckForClipboardFormat(); }privatevoid richTextBox1_TextChanged(object sender, EventArgs e) {if (richTextBox1.Text.Length < 1) { richTextBox1.Modified = false; //Пустойтекстнебудемпредлагатьсохранитьfor (inti = 1; i < 4; i++) contextMenuStrip1.Items[2].Enabled = false;//и копировать }else//ВключитьКопировать, Копироватьвсеfor (inti = 1; i < 4; i++) contextMenuStrip1.Items[i].Enabled = true;checkForClipboardFormat(); }privatevoidвырезатьToolStripMenuItem_Click(object sender, EventArgs e) {if (richTextBox1.SelectionLength > 0) richTextBox1.Cut(); }privatevoidкопироватьToolStripMenuItem_Click(object sender, EventArgs e) {if (richTextBox1.SelectionLength > 0) richTextBox1.Copy(); }privatevoidкопироватьВсеToolStripMenuItem_Click(object sender, EventArgs e) {richTextBox1.SelectAll();richTextBox1.Copy();richTextBox1.DeselectAll(); }privatevoidвставитьToolStripMenuItem_Click(object sender, EventArgs e) {if (Clipboard.GetDataObject().GetDataPresent(DataFormats.Rtf)) {//Еслибуфернепустif (richTextBox1.SelectionLength > 0){ //Ивтекстевыделенфрагмент,//то узнаем, как вставлять - поверх выделенного фрагмента или в конец?if (MessageBox.Show("Вставить поверх выделения?", "Сообщение",MessageBoxButtons.YesNo) == DialogResult.No) richTextBox1.SelectionStart = richTextBox1.Text.Length; }richTextBox1.Paste();//вставляемизбуфера } }privatevoidfrmEdit_FormClosing(object sender, FormClosingEventArgs e){if (this.richTextBox1.Modified == false) return; saveFileDialog1.FileName = this.Text;varMBox = MessageBox.Show(String.Format("Текствфайле {0} былизменен.\nСохранитьизменения?",saveFileDialog1.FileName), "RichTextEditor",MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation);if (MBox == DialogResult.No) return;if (MBox == DialogResult.Yes) {if (saveFileDialog1.ShowDialog() == DialogResult.OK) {try {richTextBox1.SaveFile(saveFileDialog1.FileName); richTextBox1.Modified = false; }catch (Exception){MessageBox.Show("Ошибкасохраненияфайла");}return; } } }publicvoidchangeStyle(FontStyle style) { Font f = newFont(richTextBox1.SelectionFont, style ^ richTextBox1.SelectionFont.Style);//переключитьшрифт richTextBox1.SelectionFont = f; //установитьновыйшрифтcheckForClipboardFormat(); }publicvoidchangeSize(float _size) { Font f = newFont(richTextBox1.SelectionFont.FontFamily, _size, richTextBox1.SelectionFont.Style);//переключитьшрифт richTextBox1.SelectionFont = f; //установитьновыйшрифтcheckForClipboardFormat(); }publicvoidchangeFont(string _name) { Font f = newFont(_name, richTextBox1.SelectionFont.Size, richTextBox1.SelectionFont.Style);//переключитьшрифт richTextBox1.SelectionFont = f; //установитьновыйшрифтcheckForClipboardFormat(); } }}
2. Казанский А.А. Программирование на Visual C# 2013: учеб. пособие для СПО / А.А. Казанский.- М.: Издательство Юрайт, 2019. – 191 с.
3. Общие сведения о RichTextBox. [Электронный ресурс]. – Режим доступа: https://learn.microsoft.com/ru-ru/dotnet/desktop/wpf/controls/richtextbox-overview?view=netframeworkdesktop-4.8
4. Павловская Т. А. С#. Программирование на языке высокого уровня. Учебник для вузов. – СПб.: Питер, 2014. – 432 с: ил.
5. Практика программирования на С# для Windows и Web в Microsoft Visual Studio. [Электронный ресурс]. – Режим доступа: http://wladm.narod.ru/C_Sharp/index.html
6. Практическое руководство. Создание дочерних форм MDI. [Электронный ресурс]. – Режим доступа: https://learn.microsoft.com/ru-ru/dotnet/desktop/winforms/advanced/how-to-create-mdi-child-forms?view=netframeworkdesktop-4.8
7. Тюкачев Н. А., Хлебостроев В. Г. C#. Основы программирования: Учебное пособие. – 3_е изд., стер. – СПб.: Издательство «Лань», 2018. – 272 с.
8. Фленов М. Е. Библия C#. – 4-е изд., перераб. и доп. – СПб.: БХВ-Петербург, 2019. – 512 с.
9. Ilhom Buriev. Есть ли смысл изучать C# в 2021 году: карьерные перспективы новичка. [Электронный ресурс]. – Режим доступа: https://proglib.io/p/est-li-smysl-izuchat-c-v-2021-godu-karernye-perspektivy-novichka-2021-07-29