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

MDI Вывести список открытых форм в панель

02.11.2018, 22:22. Показов 4170. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет, Доброго утра, вечера, ночи! )

я только начал изучать С# разбираюсь с MDI

хотелось бы сделать следующее

на главной форме в низу хотелось бы видеть некую панель где будут кнопки всех открытых форм

то есть открываем дочернее окно в родительском появляется кнопка открываем другое дочернее окно в родительском появляется вторая кнопка

затем если нажать на первую кнопку в родительском то должна стать активной форма которую открыли первой если нажали на вторую тогда становится открытой вторая

если какую либо форму закрываем тогда и кнопк адолжна пропасть

вопрос ка кэто сделать?

вот код моего приложения

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
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Data.Common;
using System.Data.SQLite;
using System.IO;
using System.Windows.Forms;
using System.Threading.Tasks;
 
namespace WindowsFormsApp2
{
    public partial class ГлавнаяФормаПрограммы : Form
 
    {
        public ГлавнаяФормаПрограммы()
        {
            InitializeComponent();
 
        LayoutMdi(MdiLayout.Cascade);
            this.WindowState = FormWindowState.Maximized;
            Timer timer = new Timer();
            timer.Interval = 1000;
            timer.Enabled = true;
            timer.Tick += new EventHandler(timer_Tick);
 
        }
        void timer_Tick(object sender, EventArgs e)
        {
           ТекущаяДатаВремя.Text = DateTime.Now.ToShortDateString() + ", " + DateTime.Now.ToLongTimeString();
        }
 
        private void ОткрытьСправочникНоменклатуры_Click(object sender, EventArgs e)
        {
            СправочникНоменклатурыФормаСписка SNFS = new СправочникНоменклатурыФормаСписка();
            SNFS.MdiParent = this;
            SNFS.Show();
        }
 
        private void Открыть_Click()
        {
            СправочникНоменклатурыФормаЭлемента SNFS = new СправочникНоменклатурыФормаЭлемента();
            this.WindowState = FormWindowState.Maximized;
            SNFS.MdiParent = this;
            SNFS.Show();
        }
    }
}
 
Form3.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Data.Common;
using System.Data.SQLite;
using System.IO;
using System.Windows.Forms;
using System.Threading.Tasks;
 
namespace WindowsFormsApp2
{
    public partial class СправочникНоменклатурыФормаСписка : Form
    {
        private SQLiteConnection con;
        private SQLiteCommand cmd;
        private DataTable dt;
 
        public СправочникНоменклатурыФормаСписка()
        {
            LayoutMdi(MdiLayout.Cascade);
 
            InitializeComponent();
            pictureBox1.Visible = false;
            GETSPISOK();
        }
 
        private void СоздатьНовуюНоменклатуру(object sender, EventArgs e)
        {
            MessageBox.Show("Выведем ворму");
        }
 
        //редактируем товар
        private void РедактироватьНоменклатуру(object sender, DataGridViewCellEventArgs e)
        {
            int currentRow = ТаблицаСпискаТоваров.CurrentRow.Index;
            СправочникНоменклатурыФормаЭлемента childForm_ = new СправочникНоменклатурыФормаЭлемента();
           childForm_.MdiParent = this.ParentForm;
           childForm_.Show();
            childForm_.Код.Text = ТаблицаСпискаТоваров[0, currentRow].Value.ToString();
            childForm_.Наименование.Text = ТаблицаСпискаТоваров[1, currentRow].Value.ToString();
            // Открыть_Click();
 
            //как я заметил при закрытии модального окна здесь мы продолжаем работу 
            //на заметку вероятно именно отсбда можно запустить функцию для обновления dataGridView1
        }
 
 
        private async void GETSPISOK()
        {
 
            pictureBox1.Show();
            pictureBox1.Update();
 
            try
            {
                var data = await GetDataAsync();
                ТаблицаСпискаТоваров.DataSource = data;
                if (ТаблицаСпискаТоваров.Columns[0].HeaderText == "id")
                {
                    ТаблицаСпискаТоваров.Columns[0].HeaderText = "Код";
                }
                if (ТаблицаСпискаТоваров.Columns[1].HeaderText == "value")
                {
                    ТаблицаСпискаТоваров.Columns[1].HeaderText = "Наименование";
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка! " + ex);
            }
            pictureBox1.Hide();
 
        }
 
        public async Task<DataTable> GetDataAsync()
        {
            //зальем товары и группы
            await Task.Run(() => {
                con = new SQLiteConnection();
                con.ConnectionString = @"Data Source=cyber.db;New=False;Version=3";
                cmd = new SQLiteCommand();
                cmd.Connection = con;
                dt = new DataTable();
                con.Open();
                cmd.CommandText = "SELECT * FROM example LIMIT 30000";
                dt.Clear();
                dt.Load(cmd.ExecuteReader());
                con.Close();
            });
            return dt;
        }
 
        private void pictureBox1_Click(object sender, EventArgs e)
        {
 
        }
 
        private void ОбновитьТаблицу_Click(object sender, EventArgs e)
        {
 
        }
    }
}
 
 
Form2.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace WindowsFormsApp2
{
    public partial class СправочникНоменклатурыФормаЭлемента : Form
    {
        public СправочникНоменклатурыФормаЭлемента()
        {
            InitializeComponent();
        }
 
        private void button3_Click(object sender, EventArgs e)
        {
 
        }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.11.2018, 22:22
Ответы с готовыми решениями:

Список открытых MDI форм
Всем привет. Создаю MDI приложение. Для 'ОКНО' установил свойство MdiList. Подскажите пожалуйста, а можно в этом списке получать список...

Панель открытых форм в MDIParent
Подскажите, пожалуйста, как правильно реализовать панель открытых форм в MDIParent? Я это делаю так: using System; using...

Получить список открытых форм приложения
Здравствуйте, задался вопросом. Как получить список открытых форм приложения delphi?

6
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
02.11.2018, 22:51
Лучший ответ Сообщение было отмечено CSharp2018 как решение

Решение

Смотри пример
Миниатюры
MDI Вывести список открытых форм в панель  
Вложения
Тип файла: zip WindowsFormsApp2.zip (11.6 Кб, 81 просмотров)
1
0 / 0 / 0
Регистрация: 02.11.2018
Сообщений: 15
03.11.2018, 13:27  [ТС]
Спасибо большое работает НО есть одно но не могу найти где именно задаются размеры кнопок?

дело в том что все кнопки одной ширины и не текст форм не полностью влазит в них

Добавлено через 9 минут
нашел решение

C#
1
cb.AutoSize = true;
но теперь другая проблема как задать в дочерних формах привязки таким образом что бы когда разворачиваешь дочернюю форму ее низ не заходил под нижнюю панель родительской формы

подскажите пожалуйста

Добавлено через 39 минут
и этот вопрос уже решил сам добавил на главную форму splitter и в него положил панель тепреь вроде все красиво отображается
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
03.11.2018, 14:51
CSharp2018, можно было без сплиттера, ограничив максимальный размер дочерних форм
0
0 / 0 / 0
Регистрация: 02.11.2018
Сообщений: 15
03.11.2018, 17:06  [ТС]
буду знать спасибо
0
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
03.11.2018, 19:42
CSharp2018,
делал когда то контрол с кнопками и управлением количества форм
Необходимо указать в свойстве MdiForm Mdi форму.
Необходимо указать в свойстве MdiFormCount количество дочерних форм. По умолчанию 3.
Вложения
Тип файла: zip CustomControls.zip (55.0 Кб, 18 просмотров)
1
0 / 0 / 0
Регистрация: 02.11.2018
Сообщений: 15
05.11.2018, 10:07  [ТС]
И Вам спасибо! буду посмотреть!

подскажите еще вопрос

для списка товаров я ползую DataGridView

товары должны быть с группами Например ручки- шариковые
ручки - цветные

так вот хотелось бы сделать как у 1с 7 или 8 где по мимо отдельного окна можно выбрать группы так и в основном окне

подскажите как это реализовать в интернете не нашел вариантов (может и плохо искал) )

вот скрин того что я имею в виду
Миниатюры
MDI Вывести список открытых форм в панель  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.11.2018, 10:07
Помогаю со студенческими работами здесь

Как получить список всех открытых форм?
subj

Как вывести на экран список открытых программ в данный момент?
Как вывести на экран список открытых программ в данный момент?

Диспетчер открытых форм
Как сделать диспетчер открытых форм, в котором можно было бы закрывать эти формы? Заранее благодарю

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

Обновление всех открытых форм
Добрый вечер! Подскажите пожалуйста, какой код надо написать на кнопку, чтобы при нажатии происходило обновление всех открытых форм....


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru