Как создать события для объектов в массиве? - PullRequest
2 голосов
/ 29 ноября 2011

Я пытаюсь создать несколько объектов и добавить их в массив, что я могу сделать, но затем я хотел бы иметь одно событие для всех объектов. Например, у меня есть 50 графических блоков в массиве, которые создаются динамически, и мне нужно получить изображение из того, который я нажимаю. Как мне сделать это без проведения 50 отдельных событий?

Ответы [ 2 ]

7 голосов
/ 29 ноября 2011

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

private void HookUpEventHandlers()
{
    var someListOfPicBoxes = GetPicBoxList();
    foreach(var p in someListOfPicBoxes)
    {
        p.Click += p_Click;
    }
}

private void p_Click(object sender, EventArgs e)
{
    // this is the PictureBox that was clicked
    var pb = (PictureBox)sender;
}
0 голосов
/ 29 ноября 2011

Вы создаете один обработчик событий и добавляете его к каждому из создаваемых вами элементов:

Добавьте элементы:

        for (int nI = 0; nI < 50; nI++)
        {
            PictureBox oBox;

            oBox = new PictureBox();
            oBox.Click += pictureBox_Click;

            // Add to your array
        }

Добавьте обработчик событий:

    private void pictureBox_Click(object sender, EventArgs e)
    {
        // Get a local reference to the box that was clicked
        PictureBox oBox = sender as PictureBox;

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...