2016-05-25 5 views
0

У меня есть динамически сгенерированные панели в моей форме, каждая панель имеет несколько элементов управления, включая TextBoxes, ComboBoxes и Buttons. Я хочу поймать их значения на кнопке «Сохранить», которая не динамически генерируется (ее в форме). Я получаю значение с этим кодом:Использование Panel.Click (из динамических панелей) на Button.Click C# Формы Windows

private void GetPanelControls(object sender, EventArgs e) 
     { 
      Panel allpanels = sender as Panel; 
      panelname = ItemsIDSelected[panelnamecounter] + "p"; 
      //"p" identifies Panel and there is a counter with a list 
      if (allpanels.Name == panelname) 
      { 
       foreach (Control item in allpanels.Controls) 
       { 
        if (item.Name == (ItemsIDSelected[panelcontrolcounter] + "t")) //"t" identifies TextBox 
        { 
         ItemsNameListforInsert.Add(item.Text); 
         panelcontrolcounter++;  //Panel has multiple controls 
        } 
        panelnamecounter++;    //There are multiple Panels 
       } 

      } 
     } 

Как я могу назвать это событие на моем Button_Click событии ??

Panel panelGroup = new System.Windows.Forms.Panel(); 
panelGroup.Click += new EventHandler(GetPanelControls); 

Это как Im Generating Panels и его событие.

ответ

1

вы можете попробовать что-то вроде этого

private void Button_Click(object sender, EventArgs e) 
{ 
    GetPanelControls(this, new EventArgs()); 
} 

EDIT

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

private void GetPanelControls() 
    { 
     foreach (Control formControl in this.Controls) 
     { 
      if (formControl is Panel) 
      { 
       string panelName = ItemsIDSelected[panelnamecounter] + "p"; 

       if (formControl.Name == panelName) 
       { 
        foreach (Control item in formControl.Controls) 
        { 
         // Your Code 
        } 
       } 
      } 
     } 
    } 
+0

Спасибо за ваш ответ Bro .. Но его не признавая панель таким образом. говорится: Ссылка на объект не установлена ​​в экземпляр объекта. –

+0

Пожалуйста, проверьте, я обновил ответ. –

+0

Спасибо большое .. Ваше предложение помогло мне .. Спасибо, много .. –

0
 //Control create button 
      private void button1_Click(object sender, EventArgs e) 
        { 

         Panel pnl = new Panel(); 
         pnl.Name = "pnltest"; 
         pnl.Location = new Point(500, 200); 
         TextBox txt1 = new TextBox(); 
         txt1.Name = "txttest"; 
         txt1.Location = new Point(0 ,10); 
         pnl.Controls.Add(txt1); 
         ComboBox cmb = new ComboBox(); 
         cmb.Location = new Point(0, 50); 
         cmb.Name = "cmbtest"; 
         cmb.Items.Add("one"); 
         cmb.Items.Add("two"); 
         cmb.Items.Add("three"); 
         pnl.Controls.Add(cmb); 
         Button btn = new Button(); 
         btn.Name = "btntest"; 
         btn.Text = "submit"; 
         btn.Location = new Point(0, 75); 
         btn.Click += btn_Click; 
         pnl.Controls.Add(btn); 
         this.Controls.Add(pnl); 


        } 
//control button click event 
    void btn_Click(object sender, EventArgs e) 
      { 
       foreach (Control frmcntrl in this.Controls) 
       { 
        if (frmcntrl is Panel) 
        { 
         if (frmcntrl.Name == "pnltest") 
         { 
          foreach (Control item in frmcntrl.Controls) 
          { 
           if (item is TextBox) 
           { 
            if (item.Name == "txttest") 
            { 
             MessageBox.Show(item.Text .ToString()); 
            } 
           } 
           else if (item is ComboBox) 
           { 
            if (item.Name == "cmbtest") 
            { 
             MessageBox.Show(item.Text); 
            } 
           } 
          } 
         } 
        } 
       } 
      } 
+0

Спасибо, сэр. У меня было это, на мой взгляд, проблема была что-то еще .. Ну, ее решение теперь .. Спасибо –

+0

ОК спасибо wali ahmed – SK2185

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

  • Нет связанных вопросов^_^