Получить несколько названий панелей с одним и тем же событием клика при нажатии на него в c # - PullRequest
0 голосов
/ 04 июня 2018

У меня есть цикл для создания нескольких панелей со следующими свойствами:
1.Name
2.Left
3.Top
4.Width
5.Height
6.Backcolor
и событие Click

моя проблема в событии Click
, каждая из этих панелей, на которой был выполнен цикл, имеет это событие.

Как узнать имя панели, созданной этим циклом.Когда нажмете на это?

Вот мой код

void showPanel()
    {
        VideoList list = new VideoList();
        int left = 125;
        int top = 50;

        DirectoryInfo[] d = new DirectoryInfo("videos").GetDirectories();
        foreach (DirectoryInfo dir in d)
        {
            Panel pnl = new Panel();
            list.panel1.Controls.Add(pnl);
            pnl.Cursor = Cursors.Hand;

            if (!File.Exists("videos\\" + dir.Name + "\\image.jpg"))
                pnl.BackColor = Color.LightGray;
            else
            {
                pnl.BackgroundImageLayout = ImageLayout.Stretch;
                pnl.BackgroundImage = Image.FromFile("videos\\" + dir.Name + "\\image.jpg");
            }

            pnl.Click += new EventHandler(pnl_Click);
            pnl.Name = dir.Name;
            pnl.Left = left;
            pnl.Top = top;
            pnl.Width = 150;
            pnl.Height = 100;
            left += 200;
            if (left >= 750)
            {
                left = 125;
                top += 150;
            }
        }
    }

1 Ответ

0 голосов
/ 04 июня 2018

Вы не включили реализацию обработчика событий (pnl_Click), она должна выглядеть примерно так:

private void pnl_Click(object sender, EventArgs e)

Для вас важной частью является параметр sender.Это всегда относится к элементу управления, который инициировал событие, в данном случае к событию Click.

Если добавить строку:

Panel thisPanel = sender as Panel;

в начале реализации обработчика событий, высможет взаимодействовать с Panel, которая вызвала событие, используя, например, thisPanel.Name

...