У меня есть 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");
}
При нажатии 'Control' щелчок не переходит к его родителю, поэтому, когда вы нажимаете на' label' , «TableLayoutPanel» не получает клика. Вы можете обрабатывать событие «Click» этих дочерних элементов управления, используя ту же логику, которую вы хотите использовать, когда вы нажимаете на родительский элемент управления. Но прежде чем идти по пути, который вы собираетесь, у вас должен быть хороший ответ на этот вопрос: * Почему вы пытаетесь имитировать то, что «DataGridView» может просто сделать для вас? * –