2016-09-02 13 views
0

は、私はこのようなコードを持っている:動的に追加されたusercontrolを制御する方法は?

MyUserControl[] myControl = new MyUserControl[10]; 

フォームのLoad:

for(int i = 0; i < 10; i++) 
{ 
    myControl[i] = new MyUserControl(); 
    myControl[i].label1.Text = "Title"; 

    this.Controls.Add (myControl[i]); 
} 

が、今ではショーが通常です。その後、後

は、以下のようなボタンを押します。私は、デバッグモードが表示されたら

private void Button1_Click(object sender, EventArgs e) 
{ 
    myControl[0].label1.Text = "Other Title"; 
} 

を、値が正常に追加しましたが、lable1テキストは、「その他のタイトル」が表示されませんでした。

私は以下の方法を試してみましたが、何もできません。

myControl[0].label1.Update(); 
myControl[0].label1.Invalidate(); 
myControl[0].label1.Refresh(); 

ご親切にお伝えください。

+1

おそらく、あなたはすべてが互いに重なり合っておらず、上にしか見ることができないようにLocationプロパティを設定することを検討するべきでしょう。ハードな推測では、そのような問題はかなり明白であるはずです。 –

+0

私はそれを試して完全にうまく動作します。これは唯一の初期化コードですか?あなたが適切な場所(x、y)を割り当てないと、それらは互いに重なるように見えるからです。 – stefankmitph

+0

正常に動作します。 [this](http://i.stack.imgur.com/vN4gS.gif) –

答えて

0

私はあなたのコンセプト希望あなた

private void Button1_Click(object sender, EventArgs e) 
{ 
    //myControl[0].label1.Text = "Other Title"; 

    MyUserControl ctrl = null; 
    foreach (var c in this.Controls) 
    { 
     if (c.GetType().Name == "MyUserControl") 
     { 
      var myctrl = (MyUserControl)c; 
      if (myctrl.Text == "Title") 
      { 
       ctrl = myctrl; 
       break; 
      } 
     } 
    } 
    if (ctrl != null) 
    { 
     ctrl.Text = "Other Title"; 
    } 
} 

これは、そのコードが動作する非常に単純な例であるため、この例の仕事を理解していないと、あなたが好きなように強化する必要があります

+0

この投稿についてコメントするのを忘れないでください –

0

ありがとうございます。私はこの問題に根本的な原因を持っています。

myControl[0].label1.Text = "Other Title"; 
myControl[0].BringToFront(); // <- Solved problem with this code. 

私はなぜzオーダーがねじれているのかわかりません。

関連する問題