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

Менюстрип и любую кнопку реализовать с использованием ООП

08.11.2016, 10:54. Показов 1826. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
 private void HighlightMainMenuStrip_Click(object sender, EventArgs e)
        {
            MainRichTextBox.SelectAll();
        }
Ребят, есть вот допустим событие, которое выделяет весь текст в боксе
Как я могу Меню стрип, да и любую кнопку, реализовать красиво в ООП.
Может у кого-нибудь есть примеры кодов ?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.11.2016, 10:54
Ответы с готовыми решениями:

Описать любую компьютерную игры через объекты используя принципы ООП
Помогите с одной проблемкой , надо описать любую компьютерную игры через объекты используя принципы ООП в java. Например , марио , плагин...

Действие на любую кнопку
Нажимаю любую кнопку на клавиатуре { какоето действие } Как оформить кто помнит?

Нажатие на любую кнопку формы
Ребят я недавно начал изучение шарпа так что хотелось бы что бы кирпичами не бросались (хотя можно). Всё очень банально. Ближе к...

5
 Аватар для Serg34
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
08.11.2016, 12:33
AGby, меню и кнопки - это атомарные объекты, Ваш пример тривиальный. Тут нечего красивее делать с точки зрения ООП. Единственное, что я бы улучшил - это именование контролов. Там же в FAQ более сложные примеры разобраны.
1
0 / 0 / 0
Регистрация: 22.02.2016
Сообщений: 17
09.11.2016, 09:09  [ТС]
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
namespace Notepad
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
        }
 
        protected override void OnClosing(CancelEventArgs e)
        {
            base.OnClosing(e);
            
            switch (MessageBox.Show("Do you want to save this file?", "Saving", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question))
            {
                case DialogResult.Yes:
                    SaveFileDialog sfd = new SaveFileDialog();
                    sfd.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
                    if (sfd.ShowDialog() == DialogResult.Cancel)
                        return;
                    string filename = sfd.FileName;
                    System.IO.File.WriteAllText(filename, MainRichTextBox.Text);
                    DialogResult result = MessageBox.Show("The file is saved", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    break;
                case DialogResult.No:
                    Application.Exit();
                    break;
                case DialogResult.Cancel:
                    e.Cancel = true;
                    break;
            }
 
            e.Cancel = true;
 
        }
 
        private void MainRichTextBox_TextChanged(object sender, EventArgs e)
        {
            AmountOfSymbolLabel.Text = MainRichTextBox.Text.Length.ToString();
            AmountOfLinesLabel.Text = MainRichTextBox.Lines.Length.ToString();
            MainRichTextBox.Modified.ToString();
        }
 
        private void OpenMainMenuStrip_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();
            ofd.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
            if (ofd.ShowDialog() == DialogResult.Cancel)
                return;
            string filename = ofd.FileName;
            string fileText = System.IO.File.ReadAllText(filename);
            MainRichTextBox.Text = fileText;
            DialogResult result = MessageBox.Show("File is opened", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
        private void SaveMainMenuStrip_Click(object sender, EventArgs e)
        {
            if (MainRichTextBox.TextLength == 0)
            {
                DialogResult result = MessageBox.Show("Empty file", "Warning", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }
            else
            {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
                if (sfd.ShowDialog() == DialogResult.Cancel)
                    return;
                string filename = sfd.FileName;
                System.IO.File.WriteAllText(filename, MainRichTextBox.Text);
                DialogResult result = MessageBox.Show("The file is saved", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
        private void PrintMainMenuStrip_Click(object sender, EventArgs e)
        {
            {
                PrintDialog Print = new PrintDialog();
                System.Drawing.Printing.PrintDocument DocumentToPrint = new System.Drawing.Printing.PrintDocument();
                Print.AllowCurrentPage = true;
                Print.ShowHelp = true;
                Print.Document = DocumentToPrint;
                DialogResult Result = Print.ShowDialog();
                if (Result == DialogResult.OK)
                {
                    DocumentToPrint.Print();
                }
            }
        }
 
        private void HighlightMainMenuStrip_Click(object sender, EventArgs e)
        {
            MainRichTextBox.SelectAll();
        }
        private void CutMainMenuStrip_Click(object sender, EventArgs e)
        {
            if (MainRichTextBox.SelectionLength > 0)
                MainRichTextBox.Cut();
        }
        private void CopyMainMenuStrip_Click(object sender, EventArgs e)
        {
            if (MainRichTextBox.SelectionLength > 0)
                MainRichTextBox.Copy();
        }
        private void PasteMainMenuStrip_Click(object sender, EventArgs e)
        {
            MainRichTextBox.Paste();
        }
        private void DeleteMainMenuStrip_Click(object sender, EventArgs e)
        {
            if (MainRichTextBox.SelectionLength > 0)
                MainRichTextBox.SelectedText = " ";
        }
 
        private void SearchMainMenuStrip_Click(object sender, EventArgs e)
        {
            SearchForm SearchForm = new SearchForm();
            SearchForm.Owner = this;
            SearchForm.Show();
        }
 
        private void ExitMainMenuStrip_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
 
    }
}
Вот например весь код основной формы
Хорошо и "правильно" ли он написан
Если нет, то что стоит изменить
0
 Аватар для Serg34
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
09.11.2016, 10:46
Лучший ответ Сообщение было отмечено AGby как решение

Решение

AGby, Нужно понимать для какого уровня это "хорошо".
Если Вы только начали изучать программирование, то код написан вполне неплохо, за исключением некоторых моментов:
1) Диалоги после использования нужно освобождать. Здесь уже писал про это.
В вашем случае нужно как-то так:
C#
1
2
3
4
5
6
7
8
using(var sfd = new SaveFileDialog())
                    {
                    sfd.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
                    if (sfd.ShowDialog() == DialogResult.Cancel) return;
                    string filename = sfd.FileName;
                    System.IO.File.WriteAllText(filename, MainRichTextBox.Text);
                    DialogResult result = MessageBox.Show("The file is saved", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    }
2) Метод OnClosing немного запутан:
Вы выходите из приложения только в случае отказа от сохранения файла, во всех остальных случаях у Вас срабатывает отмена закрытия формы. Кроме того метод OnClosing отвечает за закрытие формы, а не за выход из приложения - по логике лучше Application.Exit(); здесь не писать (ИМХО). Плюс Вы делаете метод открытым для потомков - значит нужно проверять входящие параметры на null (если придираться. Включите в параметрах анализа Все правила Майкрософт и выполните анализ кода в решении).
Вобщем, я бы этот метод так написал:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
private void MainForm_Closing(object sender, CancelEventArgs e)
{
    switch (MessageBox.Show("Do you want to save this file?", "Saving", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question))
    {
        case DialogResult.Yes:
           using(var sfd = new SaveFileDialog())
            {
            sfd.Filter = "Text files (*.txt)|*.txt|All files (*.*)|*.*";
            if (sfd.ShowDialog() == DialogResult.Cancel) return;
            string filename = sfd.FileName;
            System.IO.File.WriteAllText(filename, MainRichTextBox.Text);
            DialogResult result = MessageBox.Show("The file is saved", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            break;
        case DialogResult.No: break;
        case DialogResult.Cancel: e.Cancel = true; break;
    }
}
Естественно с подключением метода к событию MainForm.Closing
3)
C#
1
DialogResult result = MessageBox.Show("The file is saved", " ", MessageBoxButtons.OK, MessageBoxIcon.Information);
"DialogResult result = " можно не писать, потому что переменную result Вы нигде не используете.
4)
C#
1
PrintDialog Print = new PrintDialog();
Название локальных переменных всегда должно начинаться с маленькой буквы
Ну и опять же именование контролов. Вы читали то, что я Вам по ссылке писал? У Вас очень длинные названия - это отвлекает от сути.

Это для уровня новичка, а если Вы это уже переросли, и хотите писать приложения, с которыми будет удобно работать другим программистам, и которые будут поддерживать расширение, то посмотрите это видео. Там тоже простой текстовый редактор, но уже с разделением на сервисы, на модель-вид-презентер (MVP)
1
0 / 0 / 0
Регистрация: 22.02.2016
Сообщений: 17
09.11.2016, 11:07  [ТС]
Да, я прочитал вашу ссылку про названия и уже почти все исправил, названий больших больше нету
А видео посмотрю
Больше спасибо за развернутый ответ
0
 Аватар для Serg34
100 / 100 / 33
Регистрация: 20.09.2014
Сообщений: 457
Записей в блоге: 3
09.11.2016, 11:18
AGby, Пожалуйста. Спасибо можно еще внизу справа ставить или сообщение пометить как лучший ответ. Так Вам охотнее отвечать будут
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.11.2016, 11:18
Помогаю со студенческими работами здесь

Написать любую программу с использованием if
напишите пожалуйста прогу с использованием if.

Создание всплывающей подсказки при нажатии на любую кнопку
Необходимо создать всплывающую подсказку, которая будет всплывать при нажатии любой клавиши с клавиатуры/определённых клавиш с клавиатуры

Считать любую величину в одной формуле на одну кнопку
ребята хочу реализовать такую идею. Например считаем только s. на одну кнопку. Я хочу реализовать, что бы для одной кнопки, считаем каждую...

Реализовать любую анимацию
Помогите пожалуйста составить анимацию (поинтереснее)

Составить любую задачу с использованием циклов
Здравствуйте. У меня возникла проблема, я перевелся из одного университета в другой и в связи с этим поменялись языки программирования....


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Контроль корректности заполнения дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru