2011-06-28 17 views
0

我在tableLayoutpanel的行內部的運行時動態添加了控件,添加的控件是LABELS,LINKLABEL和PICTURE BOX。在winform中改變動態添加控件的值c#.net應用程序,如何跟蹤動態添加的控件

現在,我想要將這些動態添加的控件(標籤,鏈接標籤)的值(文本屬性)更改爲某個指定的值,然後單擊按鈕。

我該怎麼做?請幫助代碼。

是否存在某些類似於這些動態控件的ID,就像我們在HTML中一樣。

另外,想使用這一點,但一切都是徒勞...........

Control[] GettableLayoutPanelControls = new Control[11]; 

      GettableLayoutPanelControls = tableLayoutPanel1.Controls.Find("Control Name", true) ; 

      GettableLayoutPanelControls.SetValue("CHANGED VALUE ", 0); //this line gives error.......... 

回答

3

嘗試這樣的事情,這將增加11個新的文本框(或任何你想要的其他控制):

int NumberOfTextBoxes = 11; 
TextBox[] DynamicTextBoxes = new TextBox[NumberOfTextBoxes]; 
int ndx = 0; 

while (ndx < NumberOfTextBoxes) 
{ 
    DynamicTextBoxes[ndx] = new TextBox(); 
    DynamicTextBoxes[ndx].Name = "TextBox" + ndx.ToString(); 
    // You can set TextBox value here: 
    // DynamicTextBoxes[ndx].Text = "My Value"; 
    tableLayoutPanel1.Controls.Add(DynamicTextBoxes[ndx]); 
    ndx++; 
} 

這將動態地添加文本框您TableLayout控制。如果以後需要中檢索它們:

foreach (Control c in TableLayoutPanel1.Controls) 
{ 
    if (c is TextBox) 
    { 
     TextBox TextBoxControl = (TextBox)c; 

     // This will modify the value of the 3rd text box we added 
     if (TextBoxControl.Name.Equals("TextBox3"))  
      TextBoxControl.Text = "My Value"; 
    } 
} 
+0

@icemanind:先生,我也可以得到明智的控制行嗎?也就是說,我想獲得tableLayoutPanel的ROW 1中的控件,設置它們的新值,然後獲取ROW 2控件..........等等......這可能嗎? – sqlchild

+0

@icemanind:同樣,給所有必要的動態控件賦予不同的名稱,我可以不給出相同的名稱並訪問它們併爲它們中的每個設置不同的值,先生? – sqlchild

+0

@sqlchild - 通過行和列訪問控件有點棘手,因爲TableLayoutPanel根據大小動態更改其行和列。例如,位於第2行第1列的控件可能是其他人機器上的不同控件。例如,它可能在第1行第4列。 – Icemanind

0

最直接的方式做,這是跟蹤動態創建的控件中一個私人領域。

private Label _myLabel; 
_myLabel = new Label(); 
myLabel.Text = "Hello World!"; 
tableLayoutPanel1.Controls.Add(myLabel); 
// ... later in the button click handler ... // 
myLabel.Text = "Goodbye Cruel World!"; 

記住,Windows窗體是一個有狀態的環境,不像ASP.NET,因此當用戶與表單交互領域不會失去它們的值。

ETA:

Label dynamic_label = new Label(); 
for(in i =0;i<6;i++){this.Controls.Add(dynamic_label);} 

此代碼從您的評論添加相同標號的5倍。我不認爲這是你的意圖。當你設置Text屬性時,它們都將具有相同的文本,因爲它們引用相同的控件。你可以用我的解決方案,並宣佈

Label myLabel1, myLabel2, ..., myLabel5; 

如果你有這麼多,你宣佈他們在一個循環中,那麼我會它們存儲在Dictionary<string, Label>,這樣你就不必搜索數組找到正確的一個。

+0

我已經做了這個方法,你告訴,但有五個標籤,用相同的名字,我想每一個設置不同的值上的按鈕指定的東西單擊。 – sqlchild

+0

我這樣做了:Label dynamic_label = new Label(); --- for(in i = 0; i <6; i ++){this.Controls.Add(dynamic_label);} – sqlchild