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

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

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

Re[2]: C#複数のコンボボックスの値が一緒に変更されてしまう


(過去ログ 61 を表示中)

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

■35451 / inTopicNo.1)  C#複数のコンボボックスの値が一緒に変更されてしまう
  
□投稿者/ けけ (3回)-(2009/04/30(Thu) 18:04:30)

分類:[C#] 

お世話になります。
先ほど質問させていただいて50個のコンボボックスに、
同じ値の項目(項目は"1","2","3"です)
をセットすることはできたのですが、
なにやらハンドルを共有しているのか
1つのコンボボックスを変更するとすべての
コンボボックスの値が変更されてしまいます。

private void Item_Set()
{
foreach (Control item in panel1.Controls)
{
//ComboBoxのみ以下の処理を行う
if (item is ComboBox)
{
     ComboBox cmb = (ComboBox) item;
  if (cmb == null)
  {
   continue;
  }

  cmb.Items.Add("1");
  cmb.Items.Add("2");
  cmb.Items.Add("3");
}
}
}


cmb.Dispose()など、いろいろ試してみましたが
解決できません。何かよい方法はありますでしょうか?

よろしくお願いいたします。





環境はWinXP/VS2005/C#/.net2.0です。
引用返信 編集キー/
■35452 / inTopicNo.2)  Re[1]: C#複数のコンボボックスの値が一緒に変更されてしまう
□投稿者/ ぱぱいやん (11回)-(2009/04/30(Thu) 18:45:02)
ぱぱいやん さんの Web サイト
No35451 (けけ さん) に返信
> お世話になります。
> 先ほど質問させていただいて50個のコンボボックスに、
> 同じ値の項目(項目は"1","2","3"です)
> をセットすることはできたのですが、
> なにやらハンドルを共有しているのか
> 1つのコンボボックスを変更するとすべての
> コンボボックスの値が変更されてしまいます。

コンボボックスの選択した値が50個すべて同じように変更されるということですか?

引用返信 編集キー/
■35453 / inTopicNo.3)  Re[1]: C#複数のコンボボックスの値が一緒に変更されてしまう
□投稿者/ lop (1回)-(2009/04/30(Thu) 18:52:20)
No35451 (けけ さん) に返信
> 1つのコンボボックスを変更するとすべての
> コンボボックスの値が変更されてしまいます。
ここを詳しくお願いします。

実行時にあるコンボボックスを操作すると、他のコンボボックスも勝手に変化する
ということでしょうか?
もしそうなら、イベントハンドラ周りを調べてみると良いかも。


別の状況として、コード上の以下の部分
>>   cmb.Items.Add("1");
を変更したら、画面上のコンボボックスの値が全部同じになったという場合。
これはpanel1内にある”全てのコンボボックスに同じ操作をする”コードですから
そういう結果になると思います。

後はまかせた、エライひと達。






引用返信 編集キー/
■35456 / inTopicNo.4)  Re[1]: C#複数のコンボボックスの値が一緒に変更されてしまう
□投稿者/ Azulean (363回)-(2009/04/30(Thu) 22:11:17)
2009/04/30(Thu) 22:12:56 編集(投稿者)
No35451 (けけ さん) に返信
> なにやらハンドルを共有しているのか
> 1つのコンボボックスを変更するとすべての
> コンボボックスの値が変更されてしまいます。
どういったことでしょうか?
可能性として下記を考えました。

1.1つのコンボボックスにアイテムを追加したかったのに、50個全部に追加された
2.1つのコンボボックスでアイテムをコードで選択したら、50個全部で選択された
3.1つのコンボボックスでアイテムをマウス(キーボード)で選択したら、50回イベントが起きた

1と2であれば、for/foreachループの外でやって下さい。
3はループの中でイベントを設定していませんか?

■No35451 (けけ さん) に返信
> 	foreach (Control item in panel1.Controls)
> 	{
> 		//ComboBoxのみ以下の処理を行う
> 		if (item is ComboBox)
> 		{
>   		  ComboBox cmb = (ComboBox) item;
>    	 	  if (cmb == null)
(ComboBox)という形でキャストした場合、itemがnullの場合のみnullを返し、それ以外の場合はComboBoxのインスタンスが帰ってきます。
キャストできない場合は例外がスローされます。

しかし、今回の場合、前段でitem is ComboBoxの条件でチェックしていますので、
itemはnullではありませんし、ComboBoxにキャストできるインスタンスなので、例外がスローされることもありません。

■No35451 (けけ さん) に返信
> cmb.Dispose()など、いろいろ試してみましたが
Disposeを呼び出すと何が起きるか分かっていますか?

引用返信 編集キー/
■35457 / inTopicNo.5)  Re[1]: C#複数のコンボボックスの値が一緒に変更されてしまう
□投稿者/ みきぬ (415回)-(2009/04/30(Thu) 23:17:27)
> 1つのコンボボックスを変更するとすべての
> コンボボックスの値が変更されてしまいます。
>
それぞれの ComboBox の DataSource プロパティに同じデータソースのインスタンスを適用するとそうなった記憶が。
うろ覚えだけど。
引用返信 編集キー/
■35458 / inTopicNo.6)  Re[2]: C#複数のコンボボックスの値が一緒に変更されてしまう
□投稿者/ 倉田 有大 (585回)-(2009/05/01(Fri) 00:07:08)
俺のでばんか!(違

>1つのコンボボックスを変更するとすべての
>コンボボックスの値が変更されてしまいます。

ところで、提示されているソースはなんでしょうか?
コンボボックスの初期化でしょうか?
変更している処理がおかしいのなら変更しているコードを提示するといいと思います。
それとも提示している箇所を、コンボボックスの変更というのなら、そら処理を見るとパネルの中のコンボボックス全部に値が追加されてしまいます。

>cmb.Dispose()など、いろいろ試してみましたが

よ、よんだだめぇえええ・・

引用返信 編集キー/
■35464 / inTopicNo.7)  Re[2]: C#複数のコンボボックスの値が一緒に変更されてしまう
□投稿者/ 魔界の仮面弁士 (1057回)-(2009/05/01(Fri) 09:16:44)
No35457 (みきぬ さん) に返信
> それぞれの ComboBox の DataSource プロパティに同じデータソースのインスタンスを適用するとそうなった記憶が。
> うろ覚えだけど。

ですね。ですから、もしもけけさんが DataSource を使っているのであれば、
それぞれの ComboBox に配列やDataTable等をセットする時は、事前に
Clone/Copy で複製を作成する必要があるでしょうね。

private string[] items1 = "aaa bbb ccc ddd eee fff".Split();
private void button1_Click(object sender, EventArgs e)
{
 comboBox1.DataSource = items1;
 comboBox2.DataSource = items1;
 comboBox3.DataSource = items1.Clone();
}

上記の場合、comboBox1 と comboBox2 は連動してしまいますが、
comboBox3 は連動しません。

引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -