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

Динамическое создание компонентов при включении RadioButton

22.02.2011, 16:16. Показов 2317. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос такой.

У меня есть RadioButtons
Пусть зовутся RadioButton1, RadioButton2, ....

Возможно ли, Нажимаю на RadioButton1 создается TextBox.
Жму дальше на RadioButton2 создается еще один.
Нажимаю на RadioButton1 второй TextBox удаляется, и остается только первый.

Желательно обойтись без свойства visible.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.02.2011, 16:16
Ответы с готовыми решениями:

Динамическое создание на форме radioButton. При указании свойства CheckAlign = ContentAlignment.MiddleRight - нет флажка
На форме я создаю динамически radioButton: RadioButton radioButtons; void Create_element(int col = 4) { ...

Динамическое создание RadioButton в GroupBox
Всем привет. Нужно сделать 4 гроуп бокса, в каждом по N радиобаттонов. this.Group1 = new GroupBox(); this.Group2 =...

Динамическое создание GroupBox с набором RadioButton
Короче текст такой public Form2() { InitializeComponent(); for (int i = 0; i < 6; i++) ...

3
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
22.02.2011, 19:54
Ну такой код сделает то что ты хочешь. Но во-первых он бредовый во-вторых имеет свои недочеты.
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
byte kol=1;
TextBox[] mas=new TextBox[0];
private void radioButton1_Click(object sender, EventArgs e)
{
   if (mas.Length < 2)
   {
       TextBox tb = new TextBox();
       tb.Location = new Point(10, kol * 30 + 10);
       kol++;
       Array.Resize(ref mas, mas.Length + 1);
       mas[mas.Length - 1] = tb;
       this.Controls.Add(tb);
   }
   else
   {
       kol--;
       mas[1].Dispose();
       for (int i = 0; i < mas.Length - 1; i++)
   mas[i] = mas[i + 1];
       Array.Resize(ref mas, mas.Length - 1);
   }
}
 
private void radioButton2_Click(object sender, EventArgs e)
{
   TextBox tb = new TextBox();
   tb.Location = new Point(10, kol * 30 + 10);
   kol++;
   Array.Resize(ref mas, mas.Length + 1);
   mas[mas.Length - 1] = tb;
   this.Controls.Add(tb);
}
0
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 23
23.02.2011, 17:29  [ТС]
Собственно я уже написал то что мне нужно, но есть один просчет,
который я не могу понять какого рода, алгоритмический или чисто технический

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
private void TextBoxesVisible(object sender, EventArgs e)
    {
        RadioButton rb_click = (RadioButton)sender;
        int dim = ((Convert.ToInt16(rb_click.Text)));
 
        int x = RadioButtonFirstGroupStartPositionX;
        int y = 30;
        
        for (int i = 0; i < DimentionalTextBox; i++) // 0 1 2 3 
        {
            for (int j = 0; j < DimentionalTextBox; j++) // 0 1 2 3
            {
                if ((j < dim) & (i < dim))
                {
                    MatrixTextBoxes[i, j] = new TextBox();
                    MatrixTextBoxes[i, j].Name = "MatrixTextBox" + i + j;
                    MatrixTextBoxes[i, j].Text = i + " " + j;
                    MatrixTextBoxes[i, j].SetBounds(x, y, WidthTextBox, HeightTextBox);
                    x += DistanceBetweenTexboxWigth;
                    this.Controls.Add(MatrixTextBoxes[i, j]);
                    MatrixTextBoxes[i, j].Show();
                }
 
                else if((MatrixTextBoxes[i,j] != null)) MatrixTextBoxes[i, j].Dispose();
                
            }
            y += DistanceBetweenTexBoxHeight;
            x = RadioButtonFirstGroupStartPositionX;
        }
Оно работает, как раз как я описывал в первом посте, но тут получается есть зависимость от порядка нажатия RadioButtons.
Т.е. если жать 3-1-2-3-1-2 (условно номера Radiobuttons) все работает нормально.
Но если 3-2-1-2-1 уже кое-чего не удаляется. Это написал, чтоб не громогласным быть.

Собственно ошибка должна быть тут
C#
1
else if((MatrixTextBoxes[i,j] != null)) MatrixTextBoxes[i, j].Dispose();
Вопрос в том, это проблема алгоритма проход-условие
Или это особенно Dispose что он в какой-то момент воспринимает Textbox как null и "проскакивает"?
0
5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 23
25.02.2011, 18:17  [ТС]
Итак, методом проб и ошибок выяснил что алгоритм работает исправно.

Остается вопрос на что можно заменить конструкцию.
C#
1
if((MatrixTextBoxes[i,j] != null)) MatrixTextBoxes[i, j].Dispose();
P.S. Надеюсь, мой монолог наконец перерастет в диалог.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.02.2011, 18:17
Помогаю со студенческими работами здесь

Динамическое создание компонентов
Как сделать так чтоб по клику на кнопку создавалась новая панель в другой панели, и сразу вылазило окно с выбором для нее картинки на...

Разработка приложений с использованием стандартных и дополнительных компонентов. Динамическое создание компонентов.
Здравствуйте! Помогите мне, пожалуйста. Условие задачи состоит в следующем: из списка выбираю фигуру(например, круг). Далее открывается...

Динамическое создание компонентов
Добрый день. Задался вопросом как добавить из кода контрол в WPF. Например добавить button в stackpanel. В WF это сделать очень...

Динамическое создание компонентов
подскажите вот у меня такая проблема, надо вобщем написать программу интерфейс которой представляет собой мастер со сложным развитлением и...

Динамическое создание компонентов
Добрый вечер! Необходимо динамически создавать компоненты типа TText внутри TLayout друг под другом с автоматическим &quot;подгоном&quot;...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
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, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru