C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

■92913 / 親階層)  パネル上にあるコントールから値を取得する方法
□投稿者/ 河童 (69回)-(2019/11/07(Thu) 19:57:24)

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






編集キー/

前の記事(元になった記事) 次の記事(この記事の返信)
親記事 →Re[1]: パネル上にあるコントールから値を取得する方法 /shu
 
上記関連ツリー

パネル上にあるコントールから値を取得する方法 / 河童 (19/11/07(Thu) 19:57) #92913 ←Now
Re[1]: パネル上にあるコントールから値を取得する方法 / shu (19/11/08(Fri) 09:25) #92914
  └ Re[2]: パネル上にあるコントールから値を取得する方法 / 河童 (19/11/08(Fri) 09:57) #92915
    └ Re[3]: パネル上にあるコントールから値を取得する方法 / 河童 (19/11/08(Fri) 12:49) #92917 解決済み

上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信