2016-01-30 2 views
1

Я создаю новую вкладку на TabControl, и внутри этой вкладки содержит RichTextBox полу-динамически с именем, установив имя переменной следующим образом:Как использовать полу-динамически созданное управляющее имя?

chatWindow.Name = name + "ChatArea"; 

«имя» является названием канала чата пользователь присоединился.

ex: name = Test, RTB Name будет: TestChatArea.

Есть ли простой способ получить доступ к этому элементу управления через код, или я об этом совершенно неправильно?

+0

Какие технологии? WinForms? WPF? ASP.NET? Это важно – Steve

+0

Вы ошиблись. Суть заключается в том, что свойство '.Name' ** полностью независимо ** к объявлению C# элемента управления RichTextBox chatWindow'. Изменение свойства name - это действие во время выполнения, и оно не влияет на имя C# для компиляции C#. – Enigmativity

+0

Я использую winforms. – K0D3R

ответ

1

Чтобы программно извлечь TabPage, где элемент управления RichTextBox содержится вы должны искать все TabPage внутри TabControl и проверьте, есть ли RichTextBox в этой странице, имеет имя, которое вы искали

foreach(TabPage tp in yourTablControl.TabPages) 
{ 
    RichTextBox rtb = tp.Controls.OfType<RichTextBox().FirstOrDefault(x => x.Name == name + "ChatArea"); 
    if(rtb != null) 
    { 
     // rtb is your control, do your stuff in a sub 
     // passing the found control and break the loop 
     DoYouStuffWithRichTextBox(rtb) 
     break; 
    } 
} 

Конечно вы должен иметь способ идентифицировать переменную часть этого кода. Значение переменной имя должно быть установлено перед входом в этот цикл с фактическим значением, которое вы ищете.

Этот код будет проще, если мы можем предположить, что для каждого TabPage имеется только один RichTextBox. В этом случае, когда динамически создавая TabPage и его RichTextBox можно задать имя свойства TabPage в вашей области чата и использовать его как способ определить элемент управления

TabPage tp = yourTablControl.TabPages["chatAreaName"]; 
RichTextBox rtb = tp.Controls.OfType<RichTextBox().FirstOrDefault(); 
if(rtb != null) 
{ 
    .... 
+0

Спасибо, это очень помогло! – K0D3R

Смежные вопросы