質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

4703閲覧

RadioButtonの選択がおかしい

tadanoosakana

総合スコア30

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2015/11/16 16:48

編集2015/11/16 16:51

###前提・実現したいこと
C#でラジオボタンを配置したが、
項目をチェックした時の挙動がおかしい

###発生している問題・エラーメッセージ
RadioButtonの配列を2つ、各配列の要素は5つずつ作りました。
Parentプロパティにはそれぞれ別のGroupBoxを指定しました。
しかし、片方のRadioButtonにチェックを入れると
異なる方のParentを持つのチェックボタンのチェックが外されてしまいます。

###ソースコード

C#

1// メンバ 2RadioButton[] rb1 = new RadioButton[5]; 3RadioButton[] rb2 = new RadioButton[5]; 4GroupBox gb1 = new GroupBox(); 5GroupBox gb2 = new GroupBox(); 6 7// 設定 (どこかのメソッド内) 8 9/* グループボックスの設定は省略 */ 10 11for (int i = 0; i < 5; i++) 12{ 13 rb1[i] = new RadioButton(); 14 rb1[i].Parent = gb1; 15 // 背景色や座標などの設定 16} 17 18for (int i = 0; i < 5; i++) 19{ 20 rb2[i] = new RadioButton(); 21 rb2[i].Parent = gb2; 22 // 背景色や座標などの設定 23} 24 25// 以下略

これでrb1側の項目にチェエクを入れると
なぜかrb2側の項目に入っていたチェックが外されてしまいます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

手元の環境では再現しませんね。グループボックス別に独立して機能しています。
Parent =Controls.Addの両方試しましたが特に違いはありませんでした。ボタンが消えるといったことも起こっていません。
何が違うのでしょうか。

とりあえずこちらで試したコードを貼り付けておきます。

C#

1RadioButton[] rb1 = new RadioButton[5]; 2RadioButton[] rb2 = new RadioButton[5]; 3GroupBox gb1 = new GroupBox(); 4GroupBox gb2 = new GroupBox(); 5 6private void Form1_Load(object sender, EventArgs e) 7{ 8 gb1.Location = new Point(20, 50); 9 gb1.Size = new Size(200, 250); 10 gb1.Text = "GroupBox1"; 11 12 gb2.Location = new Point(250, 50); 13 gb2.Size = new Size(200, 250); 14 gb2.Text = "GroupBox2"; 15 16 for(int i = 0 ; i < 5 ; i++) 17 { 18 var rb = new RadioButton(); 19 rb1[i] = rb; 20 rb.Parent = gb1; 21 //gb1.Controls.Add(rb); 22 23 rb.Location = new Point(30, 40 + i * 40); 24 rb.Size = new Size(150, 16); 25 rb.Text = string.Format("RadioButton1-{0}", i + 1); 26 } 27 28 for(int i = 0 ; i < 5 ; i++) 29 { 30 var rb = new RadioButton(); 31 rb2[i] = rb; 32 rb.Parent = gb2; 33 //gb2.Controls.Add(rb); 34 35 rb.Location = new Point(30, 40 + i * 40); 36 rb.Size = new Size(150, 16); 37 rb.Text = string.Format("RadioButton2-{0}", i + 1); 38 } 39 40 this.Controls.Add(gb1); 41 this.Controls.Add(gb2); 42}

投稿2015/11/16 23:49

catsforepaw

総合スコア5938

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tadanoosakana

2015/11/17 11:20

できました ありがとうございました。
guest

0

すみません、自宅に環境が無くて、試していないのですが、

動的にグループ化する時は、 RadioButton側の .Parent を設定する方法で良いのでしたっけ?
GroupBox 側のコントロールコレクション?(だったっけな?)に RadioButton を追加する方法を取るのではなかったかな?

たぶん、上手く親子関係の設定が出来ていなくって、より上の親コントロールに一緒くたにぶら下がっているように思えます。

以下のような感じでは、どうでしょう。うろ覚えですみません。

C#

1for (int i = 0; i < 5; i++) 2{ 3 rb1[i] = new RadioButton(); 4 gb1.Controls.Add(rb1[i])); 5 // 背景色や座標などの設定 6} 7 8for (int i = 0; i < 5; i++) 9{ 10 rb2[i] = new RadioButton(); 11 gb2.Controls.Add(rb2[i])); 12 // 背景色や座標などの設定 13} 14

投稿2015/11/16 21:23

編集2015/11/16 21:25
T.Kanno

総合スコア915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tadanoosakana

2015/11/16 21:51

回答ありがとうございます。 試させていただきました。 しかし、ラジオブタンが表示されなくなりました。
T.Kanno

2015/11/16 22:43

となると、表示系の設定のチェックをする必要がありますかね? ボタンが後ろに隠れちゃってる場合は、 rb1[i].BringToFront(); で、前に出てくるかな…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問