Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
0 / 0 / 0
Регистрация: 04.11.2014
Сообщений: 17
1

Как сделать текстовый редактор с MDI-интерфейсом?

13.04.2015, 17:15. Показов 4210. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Суть вопроса вот в чем: есть текстовый редактор. Как сделать так, что6ы при нажатии на кнопку "Создать" создавалась такая же форма? Извиняюсь за возможную глупость вопроса, просто в C# я не силен, да и темы на форуме все перекопал, но так и не понял, как...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.04.2015, 17:15
Ответы с готовыми решениями:

Графический редактор с интерфейсом MDI
Абсолютно нет времени на изучение MDI. Надеюсь кто-нибудь поможет до завтра.

Как реализовать MDI-текстовый редактор
Добрый день. Пишу сейчас свой недоWordPad на RichTextBox. Не поможете с парочкой оставшихся...

Создать графический редактор с интерфейсом MDI
Создать графический редактор с интерфейсом MDI. В открытом окне документа в точке, где пользователь...

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

7
13 / 13 / 7
Регистрация: 09.04.2015
Сообщений: 51
13.04.2015, 19:01 2
Просто прописать в кнопке
C#
1
2
Имя_вашей_формы_редактора frm=new Имя_вашей_формы_редактора();
frm.show();
0
0 / 0 / 0
Регистрация: 04.11.2014
Сообщений: 17
13.04.2015, 19:29  [ТС] 3
Мне сказали, что надо как-то через MDI сделать...
0
13 / 13 / 7
Регистрация: 09.04.2015
Сообщений: 51
13.04.2015, 19:39 4
Тогда вот так, создаешь главную форму в ее настройка в обозревателе ставишь свойство IsMdiContainer true
кидаешь на форму меню или кнопку и в ней прописываешь вот такой код
C#
1
2
3
Form1 f = new Form1();
f.MdiParent = this;
f.Show();
После нажатия на кнопку или меню откроется уже готовая форма, внутри главной формы. Их можно будет создать сколько угодно по нажатию на эти клавиши
1
0 / 0 / 0
Регистрация: 04.11.2014
Сообщений: 17
14.04.2015, 02:35  [ТС] 5
Так, хорошо, МДИ сделал, теперь еще 3 вопроса образовалось: 1) почему когда в нем открыто несколько форм, у активной не показывается меню, а у всех остальных оно отображается? и как это поправить? 2)как сделать так, чтобы при закрытии каждой отдельной формы спрашивали, хочу ли я сохранить документ? 3)как сделать так, чтобы при закрытии родительской формы находило окна с изменениями и спрашивало о сохранении про каждую из них?
0
8940 / 4852 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
14.04.2015, 03:44 6
Цитата Сообщение от Coredo Посмотреть сообщение
2)как сделать так, чтобы при закрытии каждой отдельной формы спрашивали, хочу ли я сохранить документ?
При создании дочерней формы подписывайся на событие её закрытия и проверяй у неё свойство Saved. Свойство тоже нужно создать у дочерней формы. Примерно так:
Родительская форма
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
using System;
using System.ComponentModel;
using System.Windows.Forms;
 
namespace MdiTextEditor {
    public partial class MainForm : Form {
        public MainForm() {
            InitializeComponent();
            saveToolStripButton.Enabled = MdiChildren.Length != 0;
        }
        /// <summary>
        /// Кнопка «Создать новый документ»
        /// </summary>
        private void newToolStripButton_Click(object sender, EventArgs e) {
            CreateEditorWindow(false);
        }
        /// <summary>
        /// Кнопка «Сохранить активный документ»
        /// </summary>
        private void saveToolStripButton_Click(object sender, EventArgs e) {
            EditorWindow editorWindow = ActiveMdiChild as EditorWindow;
            if (editorWindow != null) editorWindow.Save();
        }
        /// <summary>
        /// Кнопка «Открыть документ»
        /// </summary>
        private void openToolStripButton_Click(object sender, EventArgs e) {
            CreateEditorWindow(true);
        }
        /// <summary>
        /// Создание нового окна оедактора
        /// </summary>
        /// <param name="open">True — если нужно вызвать диалог выбора файла для открытия</param>
        void CreateEditorWindow(bool open) {
            EditorWindow ew = new EditorWindow();
            ew.Closing += ew_Closing;
            ew.MdiParent = this;
            ew.Show();
            if (open) ew.Open();
            saveToolStripButton.Enabled = MdiChildren.Length != 0;
        }
        /// <summary>
        /// Закрытие окна редактора
        /// </summary>
        void ew_Closing(object sender, CancelEventArgs e) {
            EditorWindow ew = sender as EditorWindow;
            if (ew.Saved) return;
            //Если документ не сохранён, то выводится сообщение
            switch (
                MessageBox.Show(string.Format("Сохранить изменения в файле\r\n{0}", ew.FilePath), "Текстовый редактор",
                    MessageBoxButtons.YesNoCancel)) {
                case DialogResult.Cancel:
                    //В сообщении нажали «Отмена». Отменяем закрытие окна редактора
                    e.Cancel = true;
                    break;
                case DialogResult.Yes:
                    //В сообщении нажали «Да». Вызываем из редактора метод сохранения
                    ew.Save();
                    break;
                case DialogResult.No:
                    //Нажали «Нет». Закрываем дочернее окно.
                    e.Cancel = false;
                    break;
            }
            saveToolStripButton.Enabled = e.Cancel;
        }
        /// <summary>
        /// Кнопка «Вырезать текст»
        /// </summary>
        private void cutToolStripButton_Click(object sender, EventArgs e) {
            EditorWindow ew = ActiveMdiChild as EditorWindow;
            if (ew == null) return;
            ew.Cut();
        }
 
        /// <summary>
        /// Кнопка «Копировать текст»
        /// </summary>
        private void copyToolStripButton_Click(object sender, EventArgs e) {
            EditorWindow ew = ActiveMdiChild as EditorWindow;
            if (ew == null) return;
            ew.Copy();
        }
        /// <summary>
        /// Кнопка «Вставить текст»
        /// </summary>
        private void pasteToolStripButton_Click(object sender, EventArgs e) {
            EditorWindow ew = ActiveMdiChild as EditorWindow;
            if (ew == null) return;
            ew.Paste();
        }
    }
}

Дочерняя форма
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
using System;
using System.IO;
using System.Windows.Forms;
 
namespace MdiTextEditor {
    public partial class EditorWindow : Form {
        /// <summary>
        /// Свойство, указывающее сохранён ли документ
        /// </summary>
        public bool Saved { get; private set; }
        /// <summary>
        /// Путь к файлу, открытому в окне
        /// </summary>
        public string FilePath { get; private set; }
 
        public EditorWindow() {
            InitializeComponent();
            FilePath = string.Empty;
        }
 
        private void textBox1_TextChanged(object sender, EventArgs e) {
            Saved = false;
        }
        /// <summary>
        /// Сохранение текущего файла
        /// </summary>
        internal void Save() {
            if (string.IsNullOrEmpty(FilePath)) FilePath = ChooseFileNameToSave();
            if (string.IsNullOrEmpty(FilePath)) return;
            File.WriteAllText(FilePath, textBox1.Text);
        }
        /// <summary>
        /// Выбор имени файла для сохранения
        /// </summary>
        /// <returns>Возвращает имя файла</returns>
        static string ChooseFileNameToSave() {
            using (SaveFileDialog sfd = new SaveFileDialog()) {
                return sfd.ShowDialog() == DialogResult.OK ? sfd.FileName : string.Empty;
            }
        }
        /// <summary>
        /// Выбор файла для открытия
        /// </summary>
        /// <returns>Возвращает имя файла или пустую строку, если нажали отмену</returns>
        static string ChoooseFileToOpen() {
            using (OpenFileDialog ofd = new OpenFileDialog()) {
                return ofd.ShowDialog() == DialogResult.OK ? ofd.FileName : string.Empty;
            }
        }
        /// <summary>
        /// Открытие файла
        /// </summary>
        internal void Open() {
            FilePath = ChoooseFileToOpen();
            if (string.IsNullOrEmpty(FilePath)) {
                Saved = true;
                Close();
                return;
            }
            textBox1.Text = File.ReadAllText(FilePath);
            Text = FilePath;
        }
        /// <summary>
        /// Вырезание текста в буфер обмена
        /// </summary>
        public void Cut() {
            textBox1.Cut();
        }
        /// <summary>
        /// Копирование текста в буфер обмена
        /// </summary>
        internal void Copy() {
            textBox1.Copy();
        }
        /// <summary>
        /// Вставка текста из буфера обмена
        /// </summary>
        internal void Paste() {
            textBox1.Paste();
        }
    }
}
Вложения
Тип файла: zip MdiTextEditorExample.zip (22.1 Кб, 200 просмотров)
1
0 / 0 / 0
Регистрация: 06.01.2023
Сообщений: 2
22.01.2023, 22:28 7
а как то можно изменить цвет текста и фона?

Добавлено через 25 секунд
ViterAlex, ап
0
0 / 0 / 0
Регистрация: 06.01.2023
Сообщений: 2
23.01.2023, 15:46 8
отвечу сам себе. в главную форму добавим описание новой кнопки следующее:
C#
1
2
3
4
5
 private void toolStripButton1_Click(object sender, EventArgs e)
        {
            EditorWindow ew = ActiveMdiChild as EditorWindow;
            if (ew == null) return;
            ew.ColorDialog();
а в дочерней
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public void ColorDialog()
        {
            ColorDialog MyDialog = new ColorDialog();
            // Keeps the user from selecting a custom color.
            MyDialog.AllowFullOpen = false;
            // Allows the user to get help. (The default is false.)
            MyDialog.ShowHelp = true;
            // Sets the initial color select to the current text color.
            MyDialog.Color = textBox1.ForeColor;
 
            // Update the text box color if the user clicks OK 
            if (MyDialog.ShowDialog() == DialogResult.OK)
                textBox1.ForeColor = MyDialog.Color;
        }
0
23.01.2023, 15:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.01.2023, 15:46
Помогаю со студенческими работами здесь

Нарисовать ромб графическим редактором с интерфейсом MDI
Создать графический редактор с интерфейсом MDI. В открытом окне документа в точке, где...

Как из MDI Формы сохранить данные из DataGridView в текстовый докумет
Всем привет! Задача такая: Есть MDI форма, при нажатии на этой форме &quot;создать&quot; открывается другая...

Как написать текстовый редактор
Привет всем , люди помогите сделать программу тектовый редактор.. пожалуйста

Текстовый редактор как в Visual Studio
Интересует такой момент. Как получить такой редактор как в самой студии, думал сначала что это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru