2012-09-27 29 views
2

如何連接標籤和其他變量名稱中的變量內容?C中的連接變量值#

//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+" ℃"; 
+1

從什麼時候double有一個.Text屬性?答案似乎表明你只是想格式化文本,但我相信真正的問題是如何訪問正確的對象? – itsme86

+1

@ itsme86他引用了一個他在這裏沒有明確定義的標籤(lbl_XX_temp)。非常類似地命名爲在它上面宣佈的雙打。 – CptSupermrkt

+0

我正在查看進入的答案,並認爲我可能誤解了你的問題。你是否要求其他連接方式(下面的答案可以充分回答),還是你問如何通過字符串指定變量名?即如果XX爲「02」,則需要lbl_02_temp.Text =「設備」+ 02 +「有」+ id_02_temp +「℃」; ? – CptSupermrkt

回答

5

乾淨的方式來串聯值是使用 String.Format

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

See MSDN Doc: String.Format()

也許,我誤解了這個問題。我認爲OP想要將string轉換爲有效的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); 

的WinForms:

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); 
+0

這並沒有解決如何訪問開始的對象。該對象不稱爲「lbl_XX_temp」。看起來,XX應該替換爲一個零填充的2位數字。 – itsme86

+0

對我來說似乎也是如此。在那種情況下,你有多少個標籤?如果這是一個本地化問題,並且只有五個標籤,那麼XX的一個很好的ole switch語句會執行快速簡單的技巧。如果你有幾百個,你可以嘗試把所有的控件放入一個列表並使用索引,例如[Convert.ToInt32(XX)]列表會給你id_XX_temp。 – CptSupermrkt

+0

@CptSupermrkt我剛剛更新了答案。 –

0

String.Format實際上是不是像你的問題直字符串連接帶來性能較低。這可能是tick和nanoseconds的問題,但String.Format涉及的開銷多於僅用於字符串連接的+ b + c。

就我個人而言,String.Format看起來比較乾淨,但速度並不快。

+0

是的,對我來說,我認爲phoog有一個更快更聰明的連接方式。 – user1635148

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嗎? Silverlight的? WPF?如果是WinForms,請參閱Get a Windows Forms control by name in C#。如果WPF或Silverlight,請參閱Find WPF control by Name。這裏接受的答案還建議使用帶有字符串鍵的字典,這與我上面的建議類似。

除非您每秒鐘處理數千次,否則使用字典的性能好處可能是微不足道的,在這種情況下,您應該直接使用FindFindName

+0

這種連接方式非常聰明! 這個問題的原因是:獲取連接名稱的標籤內的值。請參閱上文。 – user1635148

+0

@ user1635148請參閱*上面的內容*我有一種感覺,我沒有完全回答你的問題,但我不明白爲什麼。也許是因爲我不明白XX從哪裏來。如果你可以發佈一個完整的方法,並解釋爲什麼它不做你想要的,你的問題可能會更清楚。 – phoog

+0

原諒我可憐的解釋。 在這個應用程序中,我需要獲取循環內的label.Text。 對(INT I = 1; I <= 6; i ++在) { //我需要L_HM_0i_02.Text, // L_HM_0i_07.Text和L_HM_0i_10.Text mx_02 =的String.Format(「L_HM_0 {0} _02「,i); //(」L_HM_0 {0} _02「,i).Text mx_07 = String.Format(」L_HM_0 {0} _07「,i); mx_10 = String.Format(「L_HM_0 {0} _10」,i); } – user1635148