2016-08-17 36 views
0

から値を読み取ることができません:は、私はこれをやろうとしている動的に生成されたラジオボタンリスト

  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#クラスの複数のインスタンス(作品)私は4つの変数/値を持つクラス「のSQLServer」を作成し

    に値を追加します正常に動作します。 次に、このクラスの複数のインスタンスの配列を作成します。たとえば、レジ​​ストリに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]); 
    } 
    

どのように私はボタンが選択されたラジオキャプチャすることができ、どのように私は別のものに対応する値を転送私のプログラムのルーチン?

「OK」ボタンをクリックして、現在アクティブなラジオボタンの値を取得し、接続するデータベースを選択することに特に興味があります。

これを正しく行うには正しい方法ですか、それとも簡単な方法ですか? 私はC#を初めて使っているので、その可能性に精通しているわけではありません。

+0

以下の回答が追加されています。それが問題を解決するか教えてください。 –

答えて

0

これには2通りの方法があります。

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]); 
} 

ハンドラrdo_CheckedChangedは次のように定義されます:タイプRadioButton

のコントロールを

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

2.反復

以下のコードを使用して、選択したラジオボタンを識別します。

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