| 分類:[C#]
いつも大変お世話になっております。
パネル上にあるコントールから値を取得する方法について教えてください。
パネル(pnlMain)には、テキストボックス、ラジオボタン、チェックボタン、ラベルなどが配置されています。 ・テキストボックス ・ラジオボタン(複数選択なし) ・チェックボタン(複数選択あり) の入力内容をリストにセットしたいと思っています。
パネルにあるコントロールを調べることはできます。(ネット参照) パネルにあるコントロールの繰り返し処理を実行して、 テキストボックスの値は取得することができました。
わからないこと点1 ラジオボタンの値をどのように取得すれば良いでしょうか? chbNaiyou_1_1_1 chbNaiyou_1_1_2 上記のラジオが配置されていて chbNaiyou_1_1_2が「true」ならば、内容に「2」(コントロール名の右端の数値)とセットしたいです。
わからないこと点2 チェックボックスの値をどのように取得すれば良いでしょうか? ラジオボタンを同様に値を取得できないです。 チェックボックスは複数選択があるときは、カンマで区切った内容をセットしたいです。 chbNaiyou_1_1_1「true」 chbNaiyou_1_1_2「true」のときの内容「1,2」 コントールの繰り返しの処理の順番がchbNaiyou_1_1_1の次がchbNaiyou_1_1_2でないので、 値のセットするタイミングがわかりません。
ご教示よろしくお願いします。
public class m_user_info { public string user_id { get; set; } // 利用者ID public int koumoku_num1 { get; set; } // 項目番号1 public int koumoku_num2 { get; set; } // 項目番号2 public string control_type { get; set; } // コントロールの種類 public string naiyou { get; set; } // 内容 }
private void button1_Click(object sender, EventArgs e) { // パネル上のコントロールを全てを列挙 // パネル上のコントロールを全てを列挙 List<Control> controls = GetAllControls<Control>(pnlMain);
List<m_user_info> lstNaiyou = new List<m_user_info>(); string dt = now.ToString("yyyy/MM/dd HH:mm:ss");
foreach (var ctl in controls) { string control_type; string target = ctl.Name; string koumoku_num1 = ""; string koumoku_num2 = ""; string naiyou = "";
// コントロールの入力内容をチェック if (target.Contains("txb")) // テキストボックス { control_type = "txb"; string[] arr = target.Split('_');
// 要素数チェック(例:txbNaiyou_1_1) if (arr.Length != 3) continue; koumoku_num1 = arr[1]; koumoku_num2 = arr[2];
naiyou = ctl.Text; } else if (target.Contains("rdb")) // ラジオボタン { control_type = "rdb"; string[] arr = target.Split('_');
// 要素数チェック(例:rdbNaiyou_1_1_1) if (arr.Length != 4) continue;
koumoku_num1 = arr[1]; koumoku_num2 = arr[2];
// わからない点1(ラジオボタンの値「True」判定方法) //naiyou = ctl.value;
} else if (target.Contains("chb")) // チェックボックス(複数選択あり) { control_type = "chb"; string[] arr = target.Split('_');
// 要素数チェック(例:chbNaiyou_1_1_1) if (arr.Length != 4) continue;
koumoku_num1 = arr[1]; koumoku_num2 = arr[2];
// わからない点2(複数選択のときは、内容に「,」区切りで結合してリストに入れたい) // chbNaiyou_1_1_1「true」 chbNaiyou_1_1_2「true」のときの内容「1,2」 } else { continue; }
// 入力内容をリストにセット m_user_info d = new m_user_info(); d.user_id = UserId; d.koumoku_num1 = int.Parse(koumoku_num1); d.koumoku_num2 = int.Parse(koumoku_num2); d.control_type = control_type; d.naiyou = naiyou;
lstNaiyou.Add(d);
}
/// <summary> /// 指定のコントロール上の全てのジェネリック型 Tコントロールを取得する。 /// </summary> /// <typeparam name="T">対象となる型</typeparam> /// <param name="top">指定のコントロール</param> /// <returns>指定のコントロール上の全てのジェネリック型 Tコントロールのインスタンス</returns> public static List<T> GetAllControls<T>(Control top) where T : Control { List<T> buf = new List<T>(); foreach (Control ctrl in top.Controls) { if (ctrl is T) buf.Add((T)ctrl); buf.AddRange(GetAllControls<T>(ctrl)); } return buf; }
|