Проблема динамического управления в Windows Forms C # - PullRequest
0 голосов
/ 12 ноября 2018

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

Образ программы.* кнопка «Adicionar Pergunta» добавляет новый групповой блок

Внутри группового блока находится поле со списком, где пользователь может выбрать предустановку элементов управления внутри группового блока.Каждый пресет имеет разные элементы управления или элементы управления в разных местах группового блока.Моя проблема заключается в том, что когда пользователь меняет пресет одного группового блока, все остальные списки прекращают работать.

Вот мой скрипт:

Переменные:

int groupboxcount = 2;
    RadioButton rb1 = new RadioButton();
    RadioButton rb2 = new RadioButton();
    TextBox tx1 = new TextBox();
    TextBox tx2 = new TextBox();

    GroupBox gb;
    ComboBox cb;
    RadioButton rb_1;
    RadioButton rb_2;
    RadioButton rb_V;
    RadioButton rb_F;
    TextBox tx_1;
    TextBox tx_2;

Нажатие кнопки:

{
        gb = new GroupBox();
        NumericUpDown Nud1 = new NumericUpDown();



        cb = new ComboBox();
        cb.SelectedIndexChanged += new EventHandler(cb2_selectec_index_changed);
        RichTextBox RichTextBox2 = new RichTextBox();
        Label labelA1 = new Label();
        Label labelA2 = new Label();
        Label labelA3 = new Label();

        gb.Name = "groupBox" + groupboxcount;
        gb.Text = "Pergunta ";
        gb.Height = 182;
        gb.Width = 520;
        gb.Location = new Point(groupBox1.Location.X, gb.Location.Y + gb.Height + 125);


        Nud1.Height = 20;
        Nud1.Width = 41;
        Nud1.Location = new Point(6, 37);
        Nud1.Value = groupboxcount;

        cb.Items.Add("Enunciado");
        cb.Items.Add("Pergunta normal");
        cb.Items.Add("Escolha multipla");
        cb.Items.Add("Verdadeiro/Falso");
        cb.Height = 21;
        cb.Width = 121;
        cb.Location = new Point(53, 36);
        RichTextBox2.Height = 80;
        RichTextBox2.Width = 249;
        RichTextBox2.Location = new Point(211, 37);
        labelA1.Text = "Nº";
        labelA2.Text = "Tipo de pergunta";
        labelA3.Text = "Pergunta";
        labelA1.Location = new Point(6, 19);
        labelA2.Location = new Point(59, 19);
        labelA3.Location = new Point(208, 19);
        labelA1.Width = 20;

        this.Controls.Add(gb);
        gb.Controls.Add(Nud1);
        gb.Controls.Add(cb);
        gb.Controls.Add(RichTextBox2);
        gb.Controls.Add(labelA1);
        gb.Controls.Add(labelA2);
        gb.Controls.Add(labelA3);


        button1.Location = new Point(button1.Location.X, gb.Location.Y + button1.Height + 200);

        groupboxcount++;
    }

Combobox cb2 выбранный индекс изменен:

{
        if (cb.SelectedIndex == 0)
        {
            //Apenas mostra enunciado
        }
        if (cb.SelectedIndex == 1)
        {
            //recebe resposta
        }


        if (cb.SelectedIndex == 2)
        {
            rb_1 = new RadioButton();
            rb_2 = new RadioButton();
            tx_1 = new TextBox();
            tx_2 = new TextBox();

            rb_1.Text = "opção 1";
            rb_1.Location = new Point(120, 75);
            rb_2.Text = "opção 2";
            rb_2.Location = new Point(120, 100);
            tx_2.Location = new Point(5, 100);
            tx_1.Location = new Point(5, 75);


            this.gb.Controls.Add(rb_1);
            this.gb.Controls.Add(rb_2);
            this.gb.Controls.Add(tx_1);
            this.gb.Controls.Add(tx_2);
        }
        else
        {
            this.gb.Controls.Remove(rb_1);
            this.gb.Controls.Remove(rb_2);
            this.gb.Controls.Remove(tx_1);
            this.gb.Controls.Remove(tx_2);
        }

        if (cb.SelectedIndex == 3)
        {
            rb_V = new RadioButton();
            rb_F = new RadioButton();

            rb_V.Text = "Verdadeiro";
            rb_V.Location = new Point(120, 75);
            rb_F.Text = "Falso";
            rb_F.Location = new Point(120, 100);

            this.gb.Controls.Add(rb_V);
            this.gb.Controls.Add(rb_F);

        }
        else
        {
            this.gb.Controls.Remove(rb_V);
            this.gb.Controls.Remove(rb_F);
        }
    }

Буду признателен, если вы поможете мне.

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