2012-08-05 84 views
0

我想在c#中進行macrosubstitution。其實我試圖學習C#。我對視覺狐狸有經驗。c中的宏替換#

反正這是我需要:

比方說,我正在嘗試添加programmaticaly一個新的控件:

ProgressBar progressBar1 = new ProgressBar(); 
progressBar1.Size = new System.Drawing.Size(516, 23); 
progressBar1.Location = new Point(10, 36); 
groupBox4.Controls.Add(progressBar1); 

現在我需要知道一個方法如何更換控件的名稱(progressBar1 )和tke字符串變量的名稱,所以我可以使用for語句創建多個進度條 ?

任何ideea?

+2

你可以把這段代碼放入一個沒有任何問題的循環中。 – 2012-08-05 15:51:35

+0

你的代碼工作很自然:),只需放入循環 – 2012-08-05 15:55:23

+0

即可使用var myNameReplace = progressBar1;這將指向同一個對象。無論如何,我不知道如何使用定義的字符串作爲對象名稱。 – 2012-08-05 15:56:56

回答

1

你必須把裏面的代碼for循環創建進度條的多個實例,如果你想使你可以將它們存儲到詞典中的項目的參考,例如:

Dictionary<int, ProgressBar> progressBars = new Dictionary<int, ProgressBar>(); 

for(int i = 0; i < someValue; i++) { 
ProgressBar progressBar = new ProgressBar(); 
progressBar.Size = new System.Drawing.Size(516, 23); 
progressBar.Location = new Point(10, 36); 
groupBox4.Controls.Add(progressBar); 
progressBars.Add(i, progressBar); 
} 

所以,現在你可以拿回所希望的進度看在字典,通過索引(或別的東西,你定義爲關鍵)......找回的進度與指數3

例(通過索引器):

ProgressBar bar = progressBars[3]; 
bar.Value = //Assign some value 
+0

以及如何調用所需的進度欄? – 2012-08-06 06:28:45

+0

您可以像使用數組一樣使用字典的索引器,請參閱已更新的答案... – aleroot 2012-08-06 09:51:35

1

progressBar1不是控件的名稱。 ProgressBar類型的變量的名稱曾用於ProgressBar的當前實例。

派生自Control的每個類都有一個字符串類型爲Name的屬性。

int xPos = 10; 
int yPos = 36; 

// Add 10 progressbars to the groupbox control collection 
for(x = 0; x < 10; x++) 
{ 
    yPos = yPos + (x * 30); 
    ProgressBar progressBar1 = new ProgressBar(); 
    progressBar1.Name = "pgb" + x.ToString(); 
    progressBar1.Size = new System.Drawing.Size(516, 23); 
    progressBar1.Location = new Point(10, yPos); 
    groupBox4.Controls.Add(progressBar1); 
} 

要檢索一個添加的進度條,您可以簡單地使用groupbox的Controls對象集合。

ProgresBar pb = groubBox4.Controls["pgb1"] as ProgressBar; 
pb.Increment(1); 
+0

我認爲這回答了問題,因爲您使用的是Name屬性。 – 2012-08-05 16:08:07

+0

確定這工作得很好。現在我需要知道如何分別調用每個進度條? – 2012-08-06 06:29:27

+0

oo我明白了。這很簡單。坦克你很難。你是最好的。 – 2012-08-06 06:43:11