3

ラベルと他の変数の名前で変数の内容を連結するにはどうすればよいですか?

//labels: lbl_01_temp, lbl_02_temp, lbl_03_temp
string XX;
double id_01_temp, id_02_temp, id_03_temp;
lbl_XX_temp.Text= "The Device " +XX+ "has" +id_XX_temp+" ℃";  
4

3 に答える 3

6

値を連結するきれいな方法は、使用することですString.Format

lbl_XX_temp.Text= String.Format("The Device {0} has {1} ℃", XX, id_XX_temp);

MSDN Doc: String.Format() を参照してください。

たぶん、私は質問を誤解しました。stringOPはaを有効なcontrol権利に変換したいと思いますか?

ウェブ:

string lblSelected = String.Format("lbl_{0}_temp", XX); 
Label lbl = (Label)this.FindControl(lblSelected);
lbl.Text = String.Format("The Device {0} has {1} ℃", XX, id_XX_temp);

Winフォーム:

string lblSelected = String.Format("lbl_{0}_temp", XX);
Control[] ctrl = this.Controls.Find(lblSelected, true);
Label lbl = ctrl[0] as Label;
lbl.Text = String.Format("The Device {0} has {1} ℃", XX, id_XX_temp);
于 2012-09-27T00:33:23.233 に答える
0

配列または辞書のペアを使用します (それらの設定は、読者のことわざの課題として残されています)。

labels[index].Text = "Device " + (index + 1) + " has temperature "
    + temperatures[index].ToString(formatString) + " ℃";

編集

コメントのコードから、ラベルを名前で識別したいようで、次のように整数変数から名前を派生させます。

for (int i=1; i<=6; i++)
{
    Label label = GetLabelForIndex(i);
    //do something with the label here
} 

問題は、特定のインデックスのラベルをどのように取得するかです。言い換えれば、の実装はGetLabelForIndex(int)何ですか?その質問に対する答えは、Label私たちが話している種類によって異なります。それはどのライブラリから来ていますか?それはWinFormsですか?シルバーライト? WPF? WinForms の場合は、「C# で名前を指定して Windows フォーム コントロールを取得する」を参照してください。WPF または Silverlight の場合は、WPF コントロールを名前で検索する を参照してください。ここで受け入れられた回答は、上記の私の提案と同様に、文字列キーを持つ辞書を使用することも提案しています。

これを 1 秒間に何千回も実行しない限り、ディクショナリを使用することによるパフォーマンス上の利点はおそらく重要ではありません。その場合は、FindorFindNameを直接使用する必要があります。

于 2012-09-27T06:52:55.507 に答える
0

String.Format実際には、質問のポーズのようなまっすぐな文字列連結よりもパフォーマンスが低くなります。おそらくティックとナノ秒の問題ですがString.Format、文字列の連結に対して a + b + c と言うだけでなく、より多くのオーバーヘッドが関係しています。

個人的にString.Formatはきれいに見えますが、速くはありません。

于 2012-09-27T00:37:17.937 に答える