|
分類:[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;
}
|