2016-12-21 10 views
0

У меня есть TableLayoutPanel с некоторыми элементами управления, добавленными как Label и PictureBox. Теперь я пытаюсь добавить обработчик для MouseClick к этой TableLayoutPanel. Если я удалю эти элементы управления Label и PictureBox, обработчик будет запущен правильно, но с элементами управления не будет. Я попытался отправить эти элементы управления обратно, например: Label.SendToBack(), но он тоже не работает. Я думаю, что проблема связана с элементами управления Label и PictureBox, потому что без них работает нормально.Fire MouseClick на TableLayoutPanel?

Как я могу это решить?

void initComponents(){ 
      IList<Mesa> lista = mDAO.findAll(); 
      if (lista.Count > 0){ 
       foreach (Mesa mesa in lista){ 
        customPanel = new TableLayoutPanel(); 
        customPanel.MouseClick += cms_MouseClick; //mouseclick of customPanel 
        customPanel.BorderStyle = BorderStyle.None; 
        customPanel.BackColor = Color.FromArgb(255, 255, 128); 
        customPanel.Size = new Size(100, 100); 
        customPanel.Name = Convert.ToString(mesa.id); 

        //label mesa 
        numMesa = new Label(); 
        numMesa.Font = new Font(numMesa.Font.Name, 12, FontStyle.Bold); 
        numMesa.Text = Convert.ToString(mesa.id); 
        numMesa.SendToBack(); 

        //picturebox 
        picture = new PictureBox(); 
        picture.Anchor = (AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right); 
        picture.Image = IguanaBar.Properties.Resources.mesabar; 
        picture.SizeMode = PictureBoxSizeMode.StretchImage; 
        picture.SendToBack(); 

        //label aviso 
        aviso = new Label(); 
        aviso.Anchor = (AnchorStyles.Right); 
        aviso.Font = new Font(aviso.Font.Name, 6, FontStyle.Bold); 
        aviso.Text = "LIVRE"; 
        aviso.ForeColor = Color.Green; 
        aviso.TextAlign = ContentAlignment.MiddleCenter; 
        picture.SendToBack(); 

        //add components 
        customPanel.Controls.Add(numMesa); 
        customPanel.Controls.Add(picture); 
        customPanel.Controls.Add(aviso); 

        //add panel a panel principal      
        panelMesas.Controls.Add(customPanel); 
       }     
      }    

      //popup menu 
      cms = new ContextMenuStrip(); 
      cms.Items.Add("Vender"); 
      cms.Items.Add("Finalizar"); 
      cms.Items.Add("Trocar"); 
     } 
+1

При нажатии 'Control' щелчок не переходит к его родителю, поэтому, когда вы нажимаете на' label' , «TableLayoutPanel» не получает клика. Вы можете обрабатывать событие «Click» этих дочерних элементов управления, используя ту же логику, которую вы хотите использовать, когда вы нажимаете на родительский элемент управления. Но прежде чем идти по пути, который вы собираетесь, у вас должен быть хороший ответ на этот вопрос: * Почему вы пытаетесь имитировать то, что «DataGridView» может просто сделать для вас? * –

ответ

1

Вы можете изменить

numMesa.SendToBack(); 
picture.SendToBack(); 

в

numMesa.MouseClick += cms_MouseClick; //mouseclick of customPanel 
    picture.MouseClick += cms_MouseClick; //mouseclick of customPanel