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

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

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.92913 の関連記事表示

<< 0 >>
■92913  パネル上にあるコントールから値を取得する方法
□投稿者/ 河童 -(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;
    }





親記事 /過去ログ160より / 関連記事表示
削除チェック/

■92914  Re[1]: パネル上にあるコントールから値を取得する方法
□投稿者/ shu -(2019/11/08(Fri) 09:25:51)
    No92913 (河童 さん) に返信

    > わからないこと点1
    > ラジオボタンの値をどのように取得すれば良いでしょうか?
    > chbNaiyou_1_1_1
    > chbNaiyou_1_1_2
    > 上記のラジオが配置されていて
    > chbNaiyou_1_1_2が「true」ならば、内容に「2」(コントロール名の右端の数値)とセットしたいです。
    chbNaiyou_1_1_2.checkedを確認すればよいです。


    >
    > わからないこと点2
    > チェックボックスの値をどのように取得すれば良いでしょうか?
    > ラジオボタンを同様に値を取得できないです。
    チェックボックスもcheckedを確認すればよいです。
    チェックボックスに対し何らかの値を対応させたい場合は別途プログラム上で処理を行う必要があります。

    > チェックボックスは複数選択があるときは、カンマで区切った内容をセットしたいです。
    文字列連結時にカンマを間に挟むように連結するとよいです。


    > chbNaiyou_1_1_1「true」 chbNaiyou_1_1_2「true」のときの内容「1,2」
    > コントールの繰り返しの処理の順番がchbNaiyou_1_1_1の次がchbNaiyou_1_1_2でないので、
    > 値のセットするタイミングがわかりません。
    >
    繰り返しの順番が決まっているのなら
    処理する順番に配列に設定したものを用意すると処理しやすいかと思います。

    > 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;
    ここでうまく順番通りになるようにするか、top.Controlsを使わず固定で配列初期化を行うようにする。
記事No.92913 のレス /過去ログ160より / 関連記事表示
削除チェック/

■92915  Re[2]: パネル上にあるコントールから値を取得する方法
□投稿者/ 河童 -(2019/11/08(Fri) 09:57:10)
    No92914 (shu さん) に返信
    
    おはようございます。shu さん、お返事ありがとうございます。
    
      
    >>わからないこと点1
    >>ラジオボタンの値をどのように取得すれば良いでしょうか?
    >>chbNaiyou_1_1_1
    >>chbNaiyou_1_1_2
    >>上記のラジオが配置されていて
    >>chbNaiyou_1_1_2が「true」ならば、内容に「2」(コントロール名の右端の数値)とセットしたいです。
    > chbNaiyou_1_1_2.checkedを確認すればよいです。
    
    今回は、コントロール取得の繰り返しの処理中に
    ラジオボタンの状態が知りたかったです。
    
    下記の様にすると、判定することができました。
    同様にチェックボタンの方も判定できそうです。
    
    if (((RadioButton)ctl).Checked == true)
    {
      naiyou = btn_num;
    }
                            
    
    >>わからないこと点2 
    > 繰り返しの順番が決まっているのなら
    > 処理する順番に配列に設定したものを用意すると処理しやすいかと思います。 
    >> 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;
    > ここでうまく順番通りになるようにするか、top.Controlsを使わず固定で配列初期化を行うようにする。
    そうですね。パネルに配置するコントールは決まっているので、
    コントロールのリストを作成して試してみます。
    
    
    
記事No.92913 のレス /過去ログ160より / 関連記事表示
削除チェック/

■92917  Re[3]: パネル上にあるコントールから値を取得する方法
□投稿者/ 河童 -(2019/11/08(Fri) 12:49:09)
    No92914 (shu さん) に返信

    コントロールのリストを作成して、
    ラジオボタンでキャストしてやれば、値を取得することができるようになりました。

    値は、
    rdb.Checked.ToString()
    で取得できるようになりました。
記事No.92913 のレス / END /過去ログ160より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -