2016-09-02 2 views
0

У меня есть такой код:Как контролировать динамически добавленный пользовательский контроль?

MyUserControl[] myControl = new MyUserControl[10]; 

когда форма нагрузки:

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-order был перекручен.