2015-11-03 4 views
1

У меня есть панель в WinForms, которая загружает панели во время выполнения вызова метода.Получение сведений о контроле, загруженных в панель динамически в WinForms

Мой код выглядит следующим образом:

//Adding a child panel 
Panel p = new Panel(); 

//Adding controls to panel 
Label lbl5 = new Label(); 
lbl5.Location = new Point(105, 3); 
lbl5.Text = note.noteName; 
Label lbl6 = new Label(); 
lbl6.Location = new Point(105, 43); 
lbl6.Text = note.noteName; 

p.Controls.Add(lbl5); 
p.Controls.Add(lbl6); 

//Adding child panel to main panel 
Panel1.Controls.Add(p); 

В этом случае, когда метод называется будет добавлен к главной панели нового ребенка панели.

Могу ли я щелкнуть конкретную панель, которая отображается на главной панели?

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

Буду признателен за любую помощь по этому вопросу.

+0

В этом коде вы не добавлять метки к детской панели! –

+0

Как вы относитесь к выбору? Вы хотите щелкнуть по нему или выбрать его в цикле? – Huntt

+0

@Huntt, когда пользователь нажимает на дочернюю панель, он должен получать контрольные значения в нем ... –

ответ

1

Подписаться на событие так:

Panel p = new Panel(); 
p.Click += panel_click; 

А затем создать событие:

private void panel_click(object sender, EventArgs e) 
{ 
    Panel childPanel = sender as Panel; 
    foreach(Control c in childPanel.Controls) 
    { 
     //Do something with you values... 
    } 
} 
+0

надеюсь, это поможет .... спасибо Huntt :) –

+0

Нет проблем, дайте мне знать, если вы все еще сталкиваетесь с проблемами. – Huntt

+0

@ DigambarMalla Похоже, мое решение разработано для вас, не могли бы вы принять этот ответ в качестве принятого ответа? Поэтому будущие читатели могут воспользоваться этим. – Huntt

2

Имя вашей панели ....

var pPanel = new Panel(); 
pPanel.Name = "pPanel"; 

// or write it this way....using object initializer 
var pPanel = new Panel 
{ 
    Name = "pPanel" 
}; 

Затем цикл через элементы управления в вас мастер панели для управления вы ищете ...

foreach(Control ctrl in mainPanel) 
{ 
    if (ctrl.Name.Contains("pPanel")) .... then do something etc...; 
} 

Вы можете также искать другие управления в ваших панелях точно так же ...

+1

Спасибо за решение :) –

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