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

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

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

Re[2]: labelに変数を使う


(過去ログ 87 を表示中)

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

■51794 / inTopicNo.1)  labelに変数を使う
  
□投稿者/ たぐぅ* (19回)-(2010/07/19(Mon) 17:07:01)

分類:[C#] 

何度も失礼いたします。
開発言語はC#です。

素朴な疑問なのですが、

label1、label2、label3、label4、label5と定義して、
それぞれのラベルに対して処理をしたいとき、


bool[] tf = new bool[5];
tf[0] = true;
tf[1] = false;
tf[2] = true;
tf[3] = true;
tf[4] = false;
という値があり、

tf[0]がtrueならlabel1に「true」を出力。falseなら「false」を出力。
tf[1]がtrueならlabel2に「true」を出力。falseなら「false」を出力。
tf[2]がtrueならlabel3に「true」を出力。falseなら「false」を出力。
tf[3]がtrueならlabel4に「true」を出力。falseなら「false」を出力。
tf[4]がtrueならlabel5に「true」を出力。falseなら「false」を出力。
という、処理をしたいとき、


for(int a = 0; a < 5; a++)
{
if(tf[a])
label(a+1).Text = "true";
else
label(a+1).Text = "false";
}


のような書き方をしたいのですが、ダメでした。
一つ一つ処理を書いていくと、
bool[] tf = new bool[5];
が大きいとき、ものすごく大変なのですが、一つ一つ書いていくしか方法はないのでしょうか?

よろしくお願いします。

引用返信 編集キー/
■51795 / inTopicNo.2)  Re[1]: labelに変数を使う
□投稿者/ かたぎり (39回)-(2010/07/19(Mon) 18:56:43)
LabelがFormとかWebとかにあるコントロールなら、
FindControlを使って処理できるんじゃないかしら?と思いまする。
引用返信 編集キー/
■51796 / inTopicNo.3)  Re[1]: labelに変数を使う
□投稿者/ よねKEN (546回)-(2010/07/19(Mon) 20:14:53)
よねKEN さんの Web サイト
2010/07/19(Mon) 20:15:53 編集(投稿者)

No51794 (たぐぅ* さん) に返信
> label1、label2、label3、label4、label5と定義して、
> それぞれのラベルに対して処理をしたいとき、

private Label[] labels;
とFormの先頭に宣言しておいて、

FormのLoadイベントあたりで、
labels = new Label[]{label1, label2, label3, label4, label5};
のようにLabelの配列を準備しておきます。
そうやっておくと後で使うとき、

> label(a+1).Text = "true";

というような記述は、以下のように書けます。
labels[a].Text = "true";

引用返信 編集キー/
■51833 / inTopicNo.4)  Re[2]: labelに変数を使う
□投稿者/ じいおい (3回)-(2010/07/21(Wed) 23:58:12)
このような関数をつくっても良いかもしれません。
(FormにLabelを張付けている場合)

public Label Label(int number) {
  foreach (Label c in this.Controls) {
    if (c.Name == "Label" + number.toString()) {
      return c;
    }
  }
  return null;
}

引用返信 編集キー/
■51844 / inTopicNo.5)  Re[3]: labelに変数を使う
□投稿者/ おのでら (15回)-(2010/07/22(Thu) 12:38:41)
おのでら さんの Web サイト
No51833 (じいおい さん) に返信
> このような関数をつくっても良いかもしれません。
> (FormにLabelを張付けている場合)
>
> public Label Label(int number) {
> foreach (Label c in this.Controls) {
> if (c.Name == "Label" + number.toString()) {
> return c;
> }
> }
> return null;
> }
>

これだと Panel や SplitContainer 内に配置されている Label を検出できないので、コントロール内のコントロールも検索するような再起呼び出しが必要になってきますね。単一コントロールの検索であれば FindControl メソッドでもいいような気がします。
引用返信 編集キー/
■51846 / inTopicNo.6)  Re[4]: labelに変数を使う
□投稿者/ じいおい (6回)-(2010/07/22(Thu) 13:19:02)
No51844 (おのでら さん) に返信
> これだと Panel や SplitContainer 内に配置されている Label を検出できないので、コントロール内のコントロールも検索するような再起呼び出しが必要になってきますね。単一コントロールの検索であれば FindControl メソッドでもいいような気がします。

すみません、FindControlってWeb用じゃないでしょうか?

引用返信 編集キー/
■51847 / inTopicNo.7)  Re[5]: labelに変数を使う
□投稿者/ 魔界の仮面弁士 (1716回)-(2010/07/22(Thu) 13:28:44)
No51846 (じいおい さん) に返信
>> 単一コントロールの検索であれば FindControl メソッドでもいいような気がします。
> すみません、FindControlってWeb用じゃないでしょうか?

System.Windows.Forms の方であれば、「.Controls.Find(string, bool)」ですね。
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=26874&no=0

ただ、名前による検索を行うにしても、それは Load 時などにあらかじめ済ませておき、
普段は配列/List/Dictionary等を通じて扱った方が、列挙効率が良いかと思います。
引用返信 編集キー/
■51882 / inTopicNo.8)  Re[2]: labelに変数を使う
□投稿者/ Jitta on the way (655回)-(2010/07/23(Fri) 18:34:16)
2010/07/23(Fri) 18:35:11 編集(投稿者)
No51796 (よねKEN さん) に返信
> 2010/07/19(Mon) 20:15:53 編集(投稿者)
>
> ■No51794 (たぐぅ* さん) に返信
>>label1、label2、label3、label4、label5と定義して、
>>それぞれのラベルに対して処理をしたいとき、
>
> private Label[] labels;
> とFormの先頭に宣言しておいて、
>
> FormのLoadイベントあたりで、
> labels = new Label[]{label1, label2, label3, label4, label5};
> のようにLabelの配列を準備しておきます。
> そうやっておくと後で使うとき、
>
>>label(a+1).Text = "true";
>
> というような記述は、以下のように書けます。
> labels[a].Text = "true";
>

さらに、Tag プロパティを使えば、こんな感じ。


tfを生成したところで、Label.Tagに放り込む。
labelN.Tag = tf[m];

labels[a].Text = ((bool)labels[a].Tag).ToString();


引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -