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

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

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

Re[4]: C# コントロール配列について


(過去ログ 22 を表示中)

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

■9405 / inTopicNo.1)  C# コントロール配列について
  
□投稿者/ rimi (1回)-(2007/10/25(Thu) 19:22:29)

分類:[.NET 全般] 

はじめまして。

環境はC# Express WindowsXPです。
C#にて、Windowsフォームにパネルを作成して、BackColorを設定したく思っています。
Panel自体が200個存在して、for文などで回して設定したいと考えています。

panel0.BackColor = Color.Red;
panel1.BackColor = Color.Red;
・
・
panel200.BackColor = Color.Red;
などとやると、長いコードになります。


なんとか、0や1などの数字を変数名にしたいのですが、できるのでしょうか?
VBみたくコントロール配列みたいな感じで


Panel [] tempr = new Panel[200];
for (int i = 0; i < 200; i++)
{
    tempr[i] = new Panel();
    //プロパティ設定
    tempr[i].Name = "Panel" + i.ToString();
}
for (int i = 0; i < 200; i++)
{
    //aaaa.getColor(i)はColorのARGBが返ってきます。実装済みです。
    Color co = aaaa.getColor(i);
    tempr[i].BackColor = Color.FromArgb(co.A, co.R, co.G, co.B);
}

と行ったのですが、ダメでした。
どなたか良い案があればお教えください。

宜しくお願い致します。

引用返信 編集キー/
■9415 / inTopicNo.2)  Re[1]: C# コントロール配列について
□投稿者/ επιστημη (622回)-(2007/10/25(Thu) 21:21:54)
επιστημη さんの Web サイト
なにが/どうダメだったのかわかりません。
引用返信 編集キー/
■9421 / inTopicNo.3)  Re[2]: C# コントロール配列について
□投稿者/ rimi (2回)-(2007/10/26(Fri) 00:40:04)
επιστημηさん

> なにが/どうダメだったのかわかりません。

お返事ありがとうございます。
すみません。少しアバウトに書いてしまいました。

行ないたいことは、
panel1.BackColor = Color.Red;
のpanel1の【1】の部分を変数展開はできるのでしょうか?

駄目だった部分は、コンパイルにはとおるのですが、
色変化は認められませんでした。

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



引用返信 編集キー/
■9422 / inTopicNo.4)  Re[3]: C# コントロール配列について
□投稿者/ いしだ (58回)-(2007/10/26(Fri) 01:12:57)
2007/10/26(Fri) 01:58:35 編集(投稿者)

発言取り消します。
引用返信 編集キー/
■9424 / inTopicNo.5)  Re[3]: C# コントロール配列について
□投稿者/ επιστημη (623回)-(2007/10/26(Fri) 02:11:50)
επιστημη さんの Web サイト
> 行ないたいことは、
> panel1.BackColor = Color.Red;
> のpanel1の【1】の部分を変数展開はできるのでしょうか?
> 
> 駄目だった部分は、コンパイルにはとおるのですが、
> 色変化は認められませんでした。

ちょいと確認。

1. 配列を使わず panel1.BackColor = Color.Red; としたとき期待通りの動作となりますか?

2. 1.がちゃんと動いている状態で:
   Panel [] tempr = new Panel[2];
   tempr[0] = panel0;
   tempr[1] = panel1;
   for ( int i = 0; i < 2; ++i ) {
     tempr[i].BackColor = Color.Red;
   }
   としたとき、期待通りの動作となりますか?

まずは1.がちゃんと動作することを確認してください。しかるのち2.を。
2がOKなら、うまくいかないハズがありません。
どこかでヘンなことしてるか、あるいはしなければならないことをしていません。

引用返信 編集キー/
■9429 / inTopicNo.6)  Re[1]: C# コントロール配列について
□投稿者/ いしだ (59回)-(2007/10/26(Fri) 09:58:20)
質問の内容は、
・既に存在するPanel200個にBackColorを設定する
・Panel200個を動的に生成してBackColorを設定する
のどちらでしょうか?

上でしたら、
((Panel)Controls["panel" + i.ToString()]).BackColor = Color.FromArgb(co.A, co.R, co.G, co.B);
※ 動作未確認

下でしたら、
newしたPanelコントロールをControls等にAddしなければいけません。
引用返信 編集キー/
■9433 / inTopicNo.7)  Re[2]: C# コントロール配列について
□投稿者/ rimi (3回)-(2007/10/26(Fri) 11:09:12)
2007/10/26(Fri) 11:10:10 編集(投稿者)
2007/10/26(Fri) 11:10:03 編集(投稿者)

επιστημηさん

お返事ありがとうございます。

> 1. 配列を使わず panel1.BackColor = Color.Red; としたとき期待通りの動作となりますか?
>
> 2. 1.がちゃんと動いている状態で:
> Panel [] tempr = new Panel[2];
> tempr[0] = panel0;
> tempr[1] = panel1;
> for ( int i = 0; i < 2; ++i ) {
> tempr[i].BackColor = Color.Red;
> }
> としたとき、期待通りの動作となりますか?

επιστημηさんの、1と2を試してみましたが、きちんと色が変わりました。
ありがとうございます。


いしださん
お返事ありがとうございます。

> 質問の内容は、
> ・既に存在するPanel200個にBackColorを設定する
> ・Panel200個を動的に生成してBackColorを設定する
> のどちらでしょうか?

既に存在するPanel200個にBackColorを設定する
のほうです。

> 上でしたら、
> ((Panel)Controls["panel" + i.ToString()]).BackColor = Color.FromArgb(co.A, co.R, co.G, co.B);
> ※ 動作未確認
>
> 下でしたら、
> newしたPanelコントロールをControls等にAddしなければいけません。

((Panel)Controls["panel" + i.ToString()]).BackColor = Color.FromArgb(co.A, co.R, co.G, co.B);
を試してみましたが、実行エラーでNullReferenceExceptionが吐かれてしまいました。

もう少し粘ってみます。


引用返信 編集キー/
■9436 / inTopicNo.8)  Re[3]: C# コントロール配列について
□投稿者/ いしだ (60回)-(2007/10/26(Fri) 13:33:33)
子コントロールに属する場合はControls.Findで第2引数にtrueを指定して
取得する等、色々注意事項もあります。
以下URL等が参考になると思います。

http://dobon.net/vb/dotnet/control/findcontrolbyname.html
引用返信 編集キー/
■9437 / inTopicNo.9)  Re[4]: C# コントロール配列について
□投稿者/ rimi (4回)-(2007/10/26(Fri) 14:24:27)
いしださん
お返事ありがとうございます。

> 子コントロールに属する場合はControls.Findで第2引数にtrueを指定して
> 取得する等、色々注意事項もあります。
> 以下URL等が参考になると思います。
> 
> http://dobon.net/vb/dotnet/control/findcontrolbyname.html



for (int i = 0; i < 200; i++)
{
    Color co = aaaa.getColor(i);
    Control[] cs = Controls.Find("panel" + i.ToString(), true);
    if (cs.Length > 0)
    {
        //System.Diagnostics.Debug.WriteLine("" + cs[0].BackColor);
        ((Panel)cs[0]).BackColor = Color.FromArgb(co.A, co.R, co.G, co.B);
    }
}

上記のやり方で背景の設定ができました。
ありがとうございます。

まだ変数の展開について意味がわかっていないので、
もう少し、ネットなどで調べてみます。

本当にありがとうございました。

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


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

このトピックに書きこむ

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

管理者用

- Child Tree -