2011-06-28 30 views
0

tableLayoutpanelの行内で実行時にコントロールを動的に追加しました。winform c#.netアプリケーションで動的に追加されたコントロールの値を変更する、動的に追加されたコントロールを追跡する方法

ここで、ボタンをクリックすると、これらの動的に追加されたコントロール(ラベル、Linklabels)の値(Textプロパティ)を特定の値に変更します。

どうすればよいですか?コードで助けてください。

HTMLのように、これらの動的コントロールのIDがありますか。また

、これを実行する最も簡単な方法

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

@cemanind:先生、コントロールの行を賢明にすることはできますか?つまり、私は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プロパティを設定すると、同じコントロールを参照するため、テキストはすべて同じテキストになります。あなたは私のソリューションを使用して、あなたがループ内でそれらを宣言していることを非常に多くを持っている場合は、あなたが見つけるために、配列を検索する必要がないように、私はDictionary<string, Label>でそれらを格納します

Label myLabel1, myLabel2, ..., myLabel5; 

を宣言することができます正しいもの。

+0

を私はあなたが言ったこの方法を行っているが、同じ名前を持つ5つのラベルは、そこにある、と私はボタンで指定されたものに、それぞれに異なる値を設定したいですクリック。 – sqlchild

+0

私はこれをしました:Label dynamic_label = new Label(); --- for(in i = 0; i <6; i ++){this.Controls.Add(dynamic_label);} – sqlchild

関連する問題