Событие, которое будет слушать любой ярлык клик в форме - PullRequest
0 голосов
/ 23 сентября 2019

Ну, я делаю шахматную игру, основанную на ярлыках.Мне нужно прислушиваться к щелчку ярлыка, поэтому, когда пользователь нажимает ярлык, я получаю название ярлыка, по которому он щелкнул.Я знаю, что могу сделать это для каждого ярлыка, но есть ли универсальное событие, которое помогло бы мне сделать одно и то же для всех из них в одном событии / цикле?

Ответы [ 5 ]

0 голосов
/ 23 сентября 2019

Предположим, вы взяли 64 ярлыка.


В форме окна, при щелчке на событии Label1, вы напишите следующий код:


private void Label1_Click(object sender, EventArgs e)
{
    var label = sender as Label;
    MessageBox.Show(label.Name);
}

Дляоставшиеся 63 метки. В представлении «Дизайн» выберите все 63 метки, используя клавишу Ctrl -> Перейти к окну «Свойства» -> в разделе «Событие» выберите пункт «Выбрать» -> в раскрывающемся списке выберите параметр «Label1_Click».


Просто закончите и запустите приложение.

0 голосов
/ 23 сентября 2019

Вы можете создать собственный класс меток, который наследуется от Label.Затем вы можете подписаться на событие Click базового класса и делать свое дело.

public class MyLabel : Label
{
    public MyLabel()
    : base()
    {
        Click += ProcessClickEvent;
    }

    private void ProcessClickEvent(object sender, System.EventArgs e)
    {
        // Do what you want to do
    }
}
0 голосов
/ 23 сентября 2019

Как упомянуто в комментариях, вы можете назначить одно событие всем ...

 List<Label> lbls = this.Controls.OfType<Label>().ToList();

 foreach (var lbl in lbls)
 {
     lbl.Click += lbl_Click;
 }

 void lbl_Click(object sender, EventArgs e)
 {
     Label lbl = sender as Label;

     MessageBox.Show(lbl.Name);
 }
0 голосов
/ 23 сентября 2019

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

private void Label_Click(object sender, EventArgs e)
{
  var nameLabel = ( sender as Label )?.Name ?? "Error";
  // ...
}

private void Label_Enter(object sender, EventArgs e)
{
  ( sender as Label ).Cursor = Cursors.Hand;
}

private void Label_Leave(object sender, EventArgs e)
{
  ( sender as Label ).Cursor = Cursors.Default;
}

Для удобства добавлено изменение курсора.

Если вы хотите динамически назначать события, вы можете использовать ответ @caner, и вы можете сгруппировать все на панели для разбора Panel.Controlsи назначить событие.

0 голосов
/ 23 сентября 2019

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

Другое решениеидентифицировать вашу этикетку с помощью координат щелчка мыши (количество кода, которое требуется, зависит от того, как вы их разместили, конечно).

...