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

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

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

Re[6]: コントロール配置後の値取得


(過去ログ 47 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■25540 / inTopicNo.1)  コントロール配置後の値取得
  
□投稿者/ C#初心者 (5回)-(2008/09/22(Mon) 09:58:54)

分類:[C#] 

C#を使っています。

チェックボックスとボタンの入ったユーザコントロールを作りました。
フォーム上にはパネルとボタンが元から配置してあります。

フォーム上のパネル内にコントロールを5個配置し(bAdd_Click)
そのコントロールにチェックボックスをつけてフォーム上に元から配置していたボタン押下で
何番目のチェックボックスにチェックが付いているのかを調べたいのですが、どうしてもチェックがfolseのままでうまくいきません。

色々なサイトで検索したり、試したりしても判らず質問させていただきます。
ご教授よろしくお願いします。



private void bAdd_Click(object sender, EventArgs e)
{
UserControl userCnt = new UserControl1();
if (panel1.Controls.Count < 5)
{
userCnt.Location = new Point(0, x * 15);
this.panel1.Controls.Add(userCnt);
x++;
}
}


UserControl1 userCnt = new UserControl1();
int y=0;
private void bOn_Click(object sender, EventArgs e)
{
foreach (Control panel1 in this.Controls)
{
if (userCnt.chkDel.Checked == true)
{
y++;
MessageBox.Show(y+"番目のチェックボックスON");
}
}
}
引用返信 編集キー/
■25543 / inTopicNo.2)  Re[1]: コントロール配置後の値取得
□投稿者/ カドルドエグ (31回)-(2008/09/22(Mon) 10:46:49)
No25540 (C#初心者 さん) に返信
追加時、またはUserControlを作成したときにデフォルトの状態がTrueではないからだと思います。
因みに「folse」ではなく「false」です。
// 細かいことですが…

また、サンプルにあるのはCheckBoxではなくUserControlですが、
これはCheckBoxを継承したコントロールか何かでしょうか?
引用返信 編集キー/
■25547 / inTopicNo.3)  Re[2]: コントロール配置後の値取得
□投稿者/ C#初心者 (7回)-(2008/09/22(Mon) 11:38:50)
カドルドエグ さん、ご返信ありがとうございます。



> 追加時、またはUserControlを作成したときにデフォルトの状態がTrueではないからだと思います。
追加時のデフォルトはチェックが付いていない状態でパネル内に配置し、その後チェックを自分で付けてボタン押下→何番目のチェックボックスにチェックがついていると調べたいんです。


> 因みに「folse」ではなく「false」です。
> // 細かいことですが…
すいません(>_<)


> また、サンプルにあるのはCheckBoxではなくUserControlですが、
> これはCheckBoxを継承したコントロールか何かでしょうか?
チェックボックスとボタンの入ったユーザコントロールを作り、 bAdd_Clickプロシージャーでユーザコントロールを追加していきました。

使い方が全く違うのかもしれませんが・・・
どうかよろしくお願いします。


判りにくい説明で申し訳ございません。
<やりたい事>
Form1には追加ボタン( bAdd_Click)とチェックボタン(bOn_Click)、パネルを配置しています。
追加ボタンでユーザコントロール(チェックボックス(デフォルトfalse)とボタンのセット)をパネル内に配置していく。
パネルに配置したチェックボックスの幾つかにチェックをつけ、つけた位置をメッセージボックスで表示する。





引用返信 編集キー/
■25553 / inTopicNo.4)  Re[3]: コントロール配置後の値取得
□投稿者/ やじゅ (654回)-(2008/09/22(Mon) 12:44:07)
やじゅ さんの Web サイト
>■No25547 (C#初心者 さん) に返信
>
>UserControl1 userCnt = new UserControl1();
>int y=0;
>private void bOn_Click(object sender, EventArgs e)
>{
>foreach (Control panel1 in this.Controls)
>{
>if (userCnt.chkDel.Checked == true)
>{
>y++;
>MessageBox.Show(y+"番目のチェックボックスON");
>}
>}
>}

これだとチェックしているのは、先頭で新しく作成したuserCntだけですよね。
新しく作成したから、Falseのままです。
panel1に該当のコントロールが入ってきているのだから、panel1を使わないと

引用返信 編集キー/
■25556 / inTopicNo.5)  Re[3]: コントロール配置後の値取得
□投稿者/ カドルドエグ (32回)-(2008/09/22(Mon) 12:52:57)
No25547 (C#初心者 さん) に返信
このような感じでいかがでしょうか?
テストなので少々半端ではありますが…。

※環境:VS2005 C# WindowsForm
※テスト環境からのコピペです
--- UseControl側のコード ---
   public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
        }
        public bool UserChceked
        {
            get { return chk.Checked; }
            set { chk.Checked = value; }
        }
    }
----------------------------

--- フォーム側のコード ---
  public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        int pointX = 1;
        private void button1_Click(object sender, EventArgs e)
        {
            // やじゅさんが既にご指摘されていますが、
            // this.ControlではPanel内のコントロールは見ません。
            // 飽くまでForm内のコントロールのみです。
            if (this.panel1.Controls.Count < 5)
            {
                UserControl1 uCtrl = new UserControl1();
                uCtrl.Name = String.Format("chkButton{0}", this.panel1.Controls.Count + 1);

                uCtrl.Location = new Point(0, pointX * 50);
                this.panel1.Controls.Add(uCtrl);
                pointX++;
            }
        }

        private void btnCountChecked_Click(object sender, EventArgs e)
        {
            StringBuilder placeNumber = new StringBuilder();
            for (int i = 0; i < this.panel1.Controls.Count; i++)
            {
                if (this.panel1.Controls[i].GetType() == typeof(UserControl1))
                {
                    UserControl1 target = (UserControl1)this.panel1.Controls[i];
                    if(!target.UserChceked) continue;
                    placeNumber.Append(target.Name.Substring(9) + 
                        (i < this.panel1.Controls.Count ? ", " : ""));
                }
            }
            MessageBox.Show(String.Format("{0}番目のチェックがオン",placeNumber.ToString()));

        }
    }
---------------------------

ユーザーコントロールはその都度別なインスタンスとし、
それぞれに番号の入った名前をつけます。
名前内の番号 = 何番目にあたる ということです。
今回は手っ取り早く(?)一桁台のみにしました。

また、複数チェックされていた場合にも対応していますが、
追加が二桁以上の場合は別途確認処理が必要です。


引用返信 編集キー/
■25562 / inTopicNo.6)  Re[4]: コントロール配置後の値取得
□投稿者/ C#初心者 (8回)-(2008/09/22(Mon) 13:54:33)
やじゅ さん、カドルドエグ さんご返信ありがとうございます。

無事に解決できました。

UseControl側にコードを書かないといけなかったんですね。
そこから間違っていました。

> ユーザーコントロールはその都度別なインスタンスとし、
> それぞれに番号の入った名前をつけます。
> 名前内の番号 = 何番目にあたる ということです。
> 今回は手っ取り早く(?)一桁台のみにしました。
教えていただいたことをじっくりと勉強して少しずつレベルアップできる様にします。
どうもありがとうございました。



それと、私は今回が初めての投稿なのですが検索していた所、同じ名前の方が既にいらっしゃった様です。
C#初心者さんの名前を語ったつもりは無かったのですが、申し訳ございません。

引用返信 編集キー/
■25563 / inTopicNo.7)  Re[5]: コントロール配置後の値取得
□投稿者/ C#初心者 (9回)-(2008/09/22(Mon) 13:59:09)
すいません、解決済みにチェックを付けてしていませんでした。

解決済み
引用返信 編集キー/
■25569 / inTopicNo.8)  Re[6]: コントロール配置後の値取得
□投稿者/ 鶏唐揚 (303回)-(2008/09/22(Mon) 14:15:45)
No25563 (C#初心者 さん) に返信
> UseControl側にコードを書かないといけなかったんですね
使用側から見れば、中のコントロールがなんだろうと「UserControl」という1つのコントロールとしてしか見れません。
なので、UserControl内の子コントロールの操作や処理はユーザコントロール自身が
「俺チェックボックス持ってるんだけど、こいつのチェック操作はこのメソッドでしてくれよ」等と
使用側に公開してあげないといけません

>C#初心者さんの名前を語ったつもりは無かったのですが、申し訳ございません。
初心者とかこの手の名前は所謂「捨てハン」なので、被る確立が非常に高いです。
今後利用するつもりがなくとも、ある程度個人を意識したHN付けするといいかも。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -