5 / 5 / 0
Регистрация: 08.10.2010
Сообщений: 23
1

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

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

Вопрос такой.

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

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

Желательно обойтись без свойства visible.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2011, 16:16
Ответы с готовыми решениями:

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

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

Динамическое создание GroupBox с набором RadioButton
Короче текст такой public Form2() { InitializeComponent(); ...

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

3
389 / 304 / 67
Регистрация: 10.07.2010
Сообщений: 802
22.02.2011, 19:54 2
Ну такой код сделает то что ты хочешь. Но во-первых он бредовый во-вторых имеет свои недочеты.
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  [ТС] 3
Собственно я уже написал то что мне нужно, но есть один просчет,
который я не могу понять какого рода, алгоритмический или чисто технический

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  [ТС] 4
Итак, методом проб и ошибок выяснил что алгоритм работает исправно.

Остается вопрос на что можно заменить конструкцию.
C#
1
if((MatrixTextBoxes[i,j] != null)) MatrixTextBoxes[i, j].Dispose();
P.S. Надеюсь, мой монолог наконец перерастет в диалог.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2011, 18:17
Помогаю со студенческими работами здесь

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

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

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

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

динамическое создание компонентов
Всем привет, вопрос состоит в следующем, нужно просто создать несколько компонентов Panel и указать...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru