2016-08-17 2 views
0

Я пытаюсь сделать это:Невозможно прочитать значение из динамически сформированного списка Button Radio

  1. прочитал несколько значений из реестра Windows (работ). Это выглядит так:

    \HKLM\...\Server1 
    int serverid 1 
    string serverName "SRVSQL01" 
    int serverport 1433 
    string database "MyDatabase1" 
    
    \HKLM\...\Server2 
    dword/int serverid 2 
    regsz/string serverName "SRVSQL02" 
    dword/int serverport 1433 
    regsz/string database "MyDatabase2" 
    

    Количество серверов может отличаться.

  2. Элементы списка. Я могу прочитать значения из реестра, это работает отлично

  3. Добавить значения для нескольких экземпляров C# класса (работ)

    Я создал класс «SQLServer» с 4 переменных/значений, как показано выше. Затем я создаю массив из нескольких экземпляров этого класса, например, если в реестре есть 4 сервера, я генерирую массив длиной 4 и добавляю значение каждого сервера к своей собственной сущности этого класса.

    public class RegSQLListItem 
    { 
        public int MSSSQLID; 
        public string MSSQLServer; 
        public int MSSQLPort; 
        public string MSSQLDatabase; 
    } 
    
  4. дисплей список в новой форме генерирующих радиокнопок, на основе числа «пунктов» в массиве.

    Я нашел некоторый код здесь, чтобы динамически генерировать список радио-кнопок с метками: https://msdn.microsoft.com/en-us/library/dwafxk44(v=vs.90).aspx

    // Generate form 
    int ProjectCounter = (RegProjectRoot.GetSubKeyNames()).Count(); 
    // other code 
    RadioButton[] radioButtons = new RadioButton[ProjectCounter]; 
    for (int i = 0; i < ProjectCounter; ++i) 
    { 
        radioButtons[i] = new RadioButton(); 
        radioButtons[i].TabIndex = i + 1; 
        radioButtons[i].Name = ProjectListItem[i].MSSQLDatabase; 
        radioButtons[i].Text = ProjectListItem[i].MSSQLDatabase; 
        radioButtons[i].Location = new System.Drawing.Point(10, 10 + i * 20); 
        this.Controls.Add(radioButtons[i]); 
    } 
    

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

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

Это правильный способ сделать это вообще или есть более простой способ? Я новичок в C#, поэтому я не знаком с возможностями.

+0

Я добавил ответ ниже. дайте мне знать, разрешит ли он проблему? –

ответ

0

Вы можете сделать это двумя способами.

1. Добавить обработчик события, как следующее:

for (int i = 0; i < ProjectCounter; ++i) 
{ 
    radioButtons[i] = new RadioButton(); 
    radioButtons[i].TabIndex = i + 1; 
    radioButtons[i].Name = "ProjectListItem[i].MSSQLDatabase"; 
    radioButtons[i].Text = "ProjectListItem[i].MSSQLDatabase"; 
    radioButtons[i].Location = new System.Drawing.Point(10, 10 + i * 20); 
    radioButtons[i].CheckedChanged += new EventHandler(rdo_CheckedChanged); 
    this.Controls.Add(radioButtons[i]); 
} 

И Handler rdo_CheckedChanged будет определен как следующий:

private static void rdo_CheckedChanged(object sender, EventArgs e) 
{ 
    RadioButton rdoButton = sender as RadioButton; 
    if (rdoButton.Checked) 
    { 
     // procced the button is checked 
    } 
} 

2. перебирать управления типа RadioButton

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

foreach (RadioButton rdo in this.Controls.OfType<RadioButton>()) 
{ 
    if (rdo.Checked) 
    { 
     // this is checked radio button 
     // Proceed with your code 
    } 
}