0


2

MouseEnterで多数のpictureBoxの単一のイベントハンドラを作成するにはどうすればよいですか?

私の計画は、次のような単一のイベントを作成することです。

OK、マウスは登録されたpictureBoxに入り、送信者の名前に従ってX pictureをロードします。

これを処理するための最良の方法は何ですか?

名前をキーとして、画像リソースの場所を値として辞書を作成する必要がありますか?

これが私がこれまでに持っているものです:

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 HeroList
       = new Dictionary();

これはうまくいきません。

3 回答


4


あなたはすでにそれをやった。 ほとんど-以下を参照

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


通常、これにはswitchステートメントが使用されます。

HeroMouseEnterメソッド内

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

また、画像が既にリソース内にある場合、それは単なる複製であるため、画像用の辞書を作成してみることはおそらく無駄です。


0


イメージ名に対応するインスタンス変数を持つ独自のイベントハンドラクラスを作成します。 次に、コードは次のようになります…​

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);
    }

さらに良いことに、(文字列ではなく)ヒーロー自体を渡すと、クラスはヒーローから対応する画像に変換する方法を知っているでしょう。