Как я могу создать один обработчик событий для многих многих PictureBoxes на MouseEnter? - PullRequest
0 голосов
/ 14 декабря 2009

Мой план состоит в том, чтобы создать одно событие, которое будет проходить:

" Хорошо, мышь вошла в зарегистрированный блок изображения, загрузите на него изображение X в соответствии с именем отправителя. "

Как лучше всего справиться с этим?

Должен ли я создать словарь с именем в качестве ключа и местоположением ресурса изображения в качестве значения?

Вот что у меня есть:

private void SetPictureBoxEvents()
        {
            Andromeda.MouseEnter += new EventHandler(HeroMouseEnter);
            Engineer.MouseEnter += new EventHandler(HeroMouseEnter);
            Nighthound.MouseEnter += new EventHandler(HeroMouseEnter);
            Swiftblade.MouseEnter += new EventHandler(HeroMouseEnter);
        }

void HeroMouseEnter(object sender, EventArgs e)
    {
        //My picture box is named Andromeda. I'm going use that name 
        // as a key is a Dictionary and pull the picture according to the name.
        //This is to make a generic event to handle all movements.
        //Any help?
        // ((PictureBox)sender).Image =             
    }

Как я могу также создать словарь для местоположений изображений в моих ресурсах .:

Dictionary<string, TestProject.Properties.Resources> HeroList 
       = new Dictionary<string, TestProject.Properties.Resources>();

Это не работает.

Ответы [ 3 ]

4 голосов
/ 14 декабря 2009

Вы уже сделали это. Почти - см. Ниже

void HeroMouseEnter(object sender, EventArgs e)
{
    //My picture box is named Andromeda. I'm going use that name 
    // as a key is a Dictionary and pull the picture according to the name.
    //This is to make a generic event to handle all movements.
    //Any help?
    ((PictureBox)sender).Image =  GetImage(((PictureBox)sender).Name)           
}
0 голосов
/ 14 декабря 2009

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

private void SetPictureBoxEvents()
    {
        Andromeda.MouseEnter += new EventHandler(new HeroMouseHandler("Andromeda.jpg").HeroMouseEnter);
        Engineer.MouseEnter += new EventHandler(new HeroMouseHandler("Engineer.jpg").HeroMouseEnter);
        Nighthound.MouseEnter += new EventHandler(new HeroMouseHandler("Nighthound.jpg").HeroMouseEnter);
        Swiftblade.MouseEnter += new EventHandler(new HeroMouseHandler("Swiftblade.jpg").HeroMouseEnter);
    }

Или, что еще лучше, вы бы передавали самого героя (вместо строки), и класс знал бы, как перевести героя на соответствующее изображение.

0 голосов
/ 14 декабря 2009

Обычно для этого используется оператор switch.

Внутри вашего метода HeroMouseEnter

PictureBox sendingBox = (PictureBox)sender;
Switch(sendingBox.Name)
{
    case "MyPicture":
        //Set picture here
        break;
    case "MyPicture2":
        //Next picture....
        break;
}

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

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