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

Как создавать новые контролы не пересекая границ старых котролов

11.03.2020, 00:34. Показов 816. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Проект консольный, тобишь я не использую конструктор формы. И я столкнулся с проблемой добавления контролов. Попытаюсь описать проблему

есть панель меню
C#
1
2
3
4
5
6
7
 menu1 = new Panel();
            menu1.Dock = DockStyle.Top;
            menu1.Size = new Size(0, 50);
            menu1.BorderStyle = BorderStyle.Fixed3D;
 
            menu1.BackColor = Color.White;
            Controls.Add(menu1);
В ней находиться менюстрип с ТулБарБатонами. А в низу есть StatusStrip
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
statStrip = new StatusStrip();
            statLabel = new ToolStripStatusLabel();
            dateLabel = new ToolStripStatusLabel();
            timeLabel = new ToolStripStatusLabel();
 
            dateLabel.BorderSides = ToolStripStatusLabelBorderSides.Left;
            timeLabel.BorderSides = ToolStripStatusLabelBorderSides.Left | ToolStripStatusLabelBorderSides.Right;
 
            statStrip.Items.Add(statLabel);
            statStrip.Items.Add(dateLabel);
            statStrip.Items.Add(timeLabel);
 
            statStrip.Dock = DockStyle.Bottom;
 
            timer = new Timer() { Interval = 1000 };
            timer.Tick += timer_Tick;
            timer.Start();
            Controls.Add(statStrip);
В итих самых кнопок в ТулБарБатоне много. Допустим при нажитии первой кнопки я хочу создать две панели одну со свойстом p1.Dock = DockStyle.Left, вторую p2.Dock = DockStyle.Right и уже в них добавлять другие элементы и с ними работать. Но я не понимаю как это сделать, что бы не выходит на уже существующие элменты или залазить еще куда-то. Проблема еще в том, чтобы внутри этих панелей контролы тоже не пересекались. Надеюсь понятно изложил проблему

P.S. Есть еще проблема, но она уже как пищя для ума, которую я тоже не понимаю как решить, но буду рад выслушать ваши идие по реализации ну и т.п. -
Кликните здесь для просмотра всего текста
Я немного не понимаю как мне очистить форму от контролов кнопки, тобишь, если я нажму на кнопку из кнопок ТулБарБатонна которая должна тоже вызвать свои котролы и она не являяться той же самой кнопкой которую нажимали в последний раз то эта кнопка должна стереть контролы той кнопки преждем чем отрисовать свои контролы, а если пользователь решил нажать на кнопку, которую нажимал в последний раз из списка ТулБарБатона то ничего не делать НО есть кнопки в ТулБарБатоне котрые, что-то типо About, Exit,Save,ReadFile тобишь на них не распростронять выше указное правило стетреть и отрисовать. Ну и понятное дело Panel menu1 и StatStrip statStrip стирать нельзя!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.03.2020, 00:34
Ответы с готовыми решениями:

Как создавать контролы ассинхронно?
Вообщем опишу суть проблемы есть у меня метод который создает контролы через код, но при записи в Combobox одной операции это происходит...

Как удалить контролы и на их место поставить новые?
Всем привет! Сразу код: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; ...

Как динамически создавать контролы на разных parent-ах?
можно ли создать в отдельном модуле такую функцию AddSpeedButton(myparent: TObject; left, top: integer; glyph: TBitmap): TSpeedbutton,...

7
Эксперт .NET
 Аватар для Rius
13114 / 7675 / 1674
Регистрация: 25.05.2015
Сообщений: 23,405
Записей в блоге: 14
11.03.2020, 05:02
Цитата Сообщение от Vlast001 Посмотреть сообщение
Проект консольный, тобишь я не использую конструктор формы.
Почему ? Одно другому не мешает.
Цитата Сообщение от Vlast001 Посмотреть сообщение
Попытаюсь описать проблему
Добавлять не по координатам, а в контейнер типа TableLayoutPanel.

Цитата Сообщение от Vlast001 Посмотреть сообщение
Я немного не понимаю как мне очистить форму от контролов
Перебрать массив Controls контрола/контейнера и удалить из него контролы.
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
15.03.2020, 19:42  [ТС]
Цитата Сообщение от Rius Посмотреть сообщение
Почему ? Одно другому не мешает.
Еще как мешает!
Во первых как вы откроете конструктор в консольном приложении? Чтобы в "Вид" открыть конструктор нужно, чтобы проект создавался как Windows Forms(.Net Freamwork).
Во вторых, я учусь программировать, следовательно мне нужна программная реализация, а не тупое перетаскивание пикселей с одного места в другое в последствии чего в неком файле самостоятельно генерируется неадекватный код.
Я могу долго аргументировать, почему использование проекта Windows Forms(.Net Freamwork) при наличие в нем более двух кнопок и как минимум одного элемента управление, который что либо делает на протяжении всей жизни приложение тот же DataGridView, Chart, PictureBox и так далее, это еще хуже чем использовать goto! НО у меня возникла существенная проблема, просто гугл которую разрешить не может, и я создал тему на форуме, в надежде, что мне помогут, а не участвовать в дискуссии бесполезности конструктора формы!

Цитата Сообщение от Rius Посмотреть сообщение
Добавлять не по координатам, а в контейнер типа TableLayoutPanel.
Я пытаюсь в свободном месте не занятом menustrip и statusStrip генерировать панели и каждый раз разные и в разном количестве, в зависимости от выбранной кнопки из лежащих на ToolBarButton, который прикреплен на menuStrip, но у меня не выходит, проблема с границами, я уже описывал эту проблему в первом посте! Если добавить TableLayoutPanel, то ее тоже нужно задавать с границами не пересекающими эти два элемента управления, то есть вы просто предложили другой элемент управление но не ответили на вопрос, с которым в обязательном порядке я столкнулся бы так как я уже описвал свою проблему, и в чем прикол использовать TableLayoutPanel, если потом на него все равно нужно ложить панели или ничего не выйдет, только кода больше...Бессмысленное решение.

Цитата Сообщение от Rius Посмотреть сообщение
Перебрать массив Controls контрола/контейнера и удалить из него контролы.
Я понимаю, что нужно перебирать, но Вы понимаете, что мне придется перебирать на каждой кнопке все контролы не относящиеся к кнопке в которой я перебираю? Как минимум тогда для каждой из кнопок придется объявлять элементы управления за границами методов, в которых только они и будут жить, такое решение полная противоположность оптимальному решению, тогда можно можно вообще забыть про оптимизацию кода. Тем более как мне не удалить не нужные контролы в цикле не подвергнув удалению остальные? есть ли в котролс что то вроде if(contorols == button1){continue} ?
0
 Аватар для ashsvis
923 / 503 / 202
Регистрация: 08.10.2018
Сообщений: 1,553
Записей в блоге: 11
15.03.2020, 19:56
Vlast001, есть такая книга:
Петцольд Ч. Программирование с использованием Microsoft Windows Forms, 2006 года издания.
Так вот там автор придерживается похожего подхода при создании приложения:

Единственный файл - это и форма и проект.
1
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
15.03.2020, 19:59  [ТС]
ashsvis, Огромное вам спасибо! Пойду искать ее в интернете, надеюсь я найду ответы хоть там или пока буду читать меня озарит
0
Эксперт .NET
 Аватар для Rius
13114 / 7675 / 1674
Регистрация: 25.05.2015
Сообщений: 23,405
Записей в блоге: 14
15.03.2020, 20:13
Цитата Сообщение от Vlast001 Посмотреть сообщение
Во первых как вы откроете конструктор в консольном приложении? Чтобы в "Вид" открыть конструктор нужно, чтобы проект создавался как Windows Forms(.Net Freamwork).
Просто создам форму в консольном проекте и открою конструктор. Создавать проект как Windows Forms не обязательно.
Название: Annotation 2020-03-15 221027.png
Просмотров: 20

Размер: 8.1 Кб
Цитата Сообщение от Vlast001 Посмотреть сообщение
Во вторых, я учусь программировать, следовательно мне нужна программная реализация, а не тупое перетаскивание пикселей с одного места в другое в последствии чего в неком файле самостоятельно генерируется неадекватный код.
Учитесь? Ну учитесь.
А программная генерация вполне себе адекватная.
Цитата Сообщение от Vlast001 Посмотреть сообщение
Я могу долго аргументировать
Долго? Ок.
Но бессмысленно. Для обучения это хорошо. Для реального применения выгоды нет.
Цитата Сообщение от ashsvis Посмотреть сообщение
Так вот там автор придерживается похожего подхода при создании приложения:
В учебнике по Qt Максе Шлее тоже такой подход. Это хорошо для понимания, как это всё работает позади автогенератора кода.
Цитата Сообщение от Vlast001 Посмотреть сообщение
но не ответили на вопрос, с которым в обязательном порядке я столкнулся бы так как я уже описвал свою проблему, и в чем прикол использовать TableLayoutPanel, если потом на него все равно нужно ложить панели или ничего не выйдет, только кода больше...Бессмысленное решение.
Потому что вы не описали исходную задачу. Но решили, что тех нарезок вашего решения всем будет достаточно для понимания остальной вашей задачи.
Цитата Сообщение от Vlast001 Посмотреть сообщение
Тем более как мне не удалить не нужные контролы в цикле не подвергнув удалению остальные? есть ли в котролс что то вроде if(contorols == button1){continue} ?
Либо запомнить созданное, чтобы потом удалить. Либо удалять из общего списка по какому-то признаку. Опять же, вы не выдаёте исходной задачи, поэтому что-то конкретное посоветовать нельзя.
0
Эксперт .NET
 Аватар для Rius
13114 / 7675 / 1674
Регистрация: 25.05.2015
Сообщений: 23,405
Записей в блоге: 14
15.03.2020, 22:40
Цитата Сообщение от Vlast001 Посмотреть сообщение
Если добавить TableLayoutPanel, то ее тоже нужно задавать с границами не пересекающими эти два элемента управления, то есть вы просто предложили другой элемент управление но не ответили на вопрос, с которым в обязательном порядке я столкнулся бы
Разумные используют Docking и вручную координаты не задают.
0
Эксперт .NET
 Аватар для Rius
13114 / 7675 / 1674
Регистрация: 25.05.2015
Сообщений: 23,405
Записей в блоге: 14
17.03.2020, 07:33
Ещё вариант вспомнил - flowlayoutpanel. Сам расставляет контролы так, чтобы они не пересекались.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.03.2020, 07:33
Помогаю со студенческими работами здесь

Как каждый раз создавать новые файлы?
Есть функция, которая при расчете должна записывать данные каждый раз в новый файл (имя файла неважно) Добавлено через 1 час 38 минут ...

Как динамически создавать новые поля в документе?
Как динамически создавать новые поля в документе? По ходу выполнения необходимо появление новых полей с данными и последующим их...

Как позволить пользователю создавать новые базы данных
Есть пользователь -- член роли public. Нужно что-то вроде grant а, чтобы он мог создавать новые базы данных. И чтобы при этом никаких...

Как создавать новые страницы и переключаться между ними?
Здравствуйте уважаемы посетители форума. Недавно начал изучать Xamarin. Возник вопрос как создавать новые страницы и переключатся между...

Как создавать новые экземпляры класса и как к ним обращаться?
создал класс Public Class book Public Property strname As String Public Property strautor As String Public Property...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru