радиокнопка нажата в любом из групповых полей, что она удаляет щелчок из любого группового поля, которое было ранее нажато

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

Этот код находится в цикле, который определяется количеством необходимых вопросов.

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

Как решить эту проблему?

                GroupBox grpAnswerType = new GroupBox();                                                         // new groupbox
                if (intZ < 9) 
                {
                    grpAnswerType.Name = "grpAnswerType00" + strQNumber;
                }
                if (intZ >= 10 & intZ <= 99)                                                  // intZ is the counter in the loop
                {
                    grpAnswerType.Name = "grpAnswerType0" + strQNumber;                       // name is used later
                }
                if (intZ >= 100 & intZ <= 999)
                {
                    grpAnswerType.Name = "grpAnswerType" + strQNumber;
                }

                grpAnswerType.Location = new Point(290, intR + 20);
                grpAnswerType.Size = new Size(150, 45);
                grpAnswerType.ForeColor = System.Drawing.Color.Red;
                grpAnswerType.BackColor = SystemColors.Control;
                grpAnswerType.Font = font; 
                grpAnswerType.Text = "Choose answer type ";
                this.Controls.Add(grpAnswerType);
                grpAnswerType.Show();
                clsGlobals.gGroupBoxRadioButton3[intZ] = grpAnswerType;                 // add to array for later storage to database  
                pnlQ11.Controls.Add(grpAnswerType);                                     // add to the dynamic panel on the form




                RadioButton rbtnA1 = new RadioButton();                                                                   // Radio Button1  
                if (intZ < 9)
                {
                    rbtnA1.Name = "rbtnA100" + strQNumber;
                }
                if (intZ >= 10 & intZ <= 99)
                {
                    rbtnA1.Name = "rbtnA10" + strQNumber;
                }
                if (intZ >= 100 & intZ <= 999)
                {
                    rbtnA1.Name = "rbtnA1" + strQNumber;
                }

                rbtnA1.Location = new Point(295, intR + 38);
                rbtnA1.Size = new Size(60, 25);
                rbtnA1.Text = "One"; 

                rbtnA1.Font = font;
                rbtnA1.ForeColor = System.Drawing.Color.Blue;
                rbtnA1.BackColor = SystemColors.Control;
                grpAnswerType.Controls.Add(rbtnA1);
                pnlQ11.Controls.Add(rbtnA1);                                                       // if this is not commented, it appears on the panel, if not it does not
                rbtnA1.Show();
                clsGlobals.gRadioButtonOne[intZ] = rbtnA1;
                rbtnA1.BringToFront();

                RadioButton rbtnA2 = new RadioButton();                                                                   // Radio Button 2  
                if (intZ < 9)
                {
                    rbtnA2.Name = "rbtnA200" + strQNumber;
                }
                if (intZ >= 10 & intZ <= 99)
                {
                    rbtnA2.Name = "rbtnA20" + strQNumber;
                }
                if (intZ >= 100 & intZ <= 999)
                {
                    rbtnA2.Name = "rbtnA2" + strQNumber;
                }
                rbtnA2.Location = new Point(355, intR + 38);
                rbtnA2.Size = new Size(70, 25);
                rbtnA2.Text = "All"; ;

                rbtnA2.Font = font;
                rbtnA2.ForeColor = System.Drawing.Color.Blue;
                rbtnA2.BackColor = SystemColors.Control;
                grpAnswerType.Controls.Add(rbtnA2);
                pnlQ11.Controls.Add(rbtnA2);                                                        // if this is not commented, it appears on the panel, if not it does not                    


                rbtnA2.Show();
                clsGlobals.gRadioButtonAll[intZ] = rbtnA2;
                rbtnA2.BringToFront();     

person Pete    schedule 12.11.2012    source источник
comment
Не добавляйте переключатель на панель, добавляйте его только в групповой блок. Отрегулируйте местоположение соответствующим образом.   -  person Hans Passant    schedule 17.11.2012


Ответы (1)


Я думаю, это потому, что pnlQ11 является другим UserControl (я предполагаю, что вы используете Windows Forms), и, согласно MSDN, элемент управления может быть назначен только одному Control.ControlCollection (http://msdn.microsoft.com/en-us/library/system.windows.forms.control.controlcollection.add%28v=vs.100%29.aspx).

Таким образом, ваш RadioButton удаляется из GroupBox и добавляется к pnlQ11, который является тем же элементом управления, к которому принадлежат все остальные RadioButton. Тогда решение состоит в том, чтобы не добавлять RadioButton к другому элементу управления и оставить его только в GroupBox.

person Daniel Castro    schedule 12.11.2012