2016-05-10 2 views
0

У меня есть Windows FormTestForm, а в моем Form У меня есть несколько меток, которые используются только для отображения текста.Событие кликов Windows Forms не запускается при нажатии на метку?

Мне нужно показать MessageBox.Show в любое время, когда нажата кнопка Form. Таким образом, у меня есть event handler за клик, который выглядит следующим образом:

private void TestForm_Click(object sender, EventArgs e) 
{ 
    MessageBox.Show("The form has been clicked"); 
} 

К сожалению, событие щелчка не срабатывает, когда я нажимаю над ярлык в Form. Есть ли способ исправить это, помимо потребления события click для ярлыков?

Спасибо.

+0

Двойной щелчок на «Ярлык» и напишите свой код в событии 'label_click'. –

+0

Это единственное решение? Чтобы зафиксировать событие щелчка каждой метки? – rbhat

+0

Вы можете добавить одно и то же событие click ко всем ярлыкам, но да, все они должны знать, что вы хотите. – TaW

ответ

1

Чтобы использовать то же событие щелчка для всех меток:

В свойствах для каждой метки, перейдите на вкладку (болт молнии) Events.

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

Вот Свойства> События> Нажмите обработчик (внизу справа):

The properties/events box for the label

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

Затем, когда вы добавляете более Label с, просто выберите обработчик события из выпадающего списка Click событий:

enter image description here

Надеется, что это помогает!

0

Чтобы отразить комментарий LarsTech, я использовал что-то подобное в прошлом, когда у меня были проблемы с перекрытием ярлыков и отсутствием истинной прозрачности в WinForms. То, что я сделал, это сделать метки невидимыми в Форме, затем пропустить их в событии рисования формы, вытащить информацию из них, а затем использовать Graphics.DrawString для рисования текста. Таким образом, вы все равно сможете увидеть их в режиме дизайна.

Это быстрый пример того, что я имею в виду.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Paint(object sender, PaintEventArgs e) 
    { 
     foreach (var temp in this.Controls) 
     { 
      if (temp is Label) //Verify that control is a label 
      { 
       Label lbl =(Label)temp; 
       e.Graphics.DrawString(lbl.Text, lbl.Font, new SolidBrush(lbl.ForeColor), new Rectangle(lbl.Location, lbl.Size)); 
      } 
     } 

    } 

    private void Form1_Click(object sender, EventArgs e) 
    { 
     MessageBox.Show("The Form has been clicked"); 
    } 
} 
Смежные вопросы