7
private void makeMoleVisable(int mole, PictureBox MoleHill)
    {
        switch (mole)
        {
            case 1:
                if (p01.Image == pmiss.Image && MoleHill.Image == pHill.Image)
                {
                    molesmissed ++;
                }
                p01.Image = MoleHill.Image;
              break;
            case 2:
              if (p02.Image == pmiss.Image && MoleHill.Image == pHill.Image)
              {
                  molesmissed++;
              }
                p02.Image = MoleHill.Image;
                break;

** 私はこれらのケースステートメントを 36 個持っており、それぞれ別の画像ボックスに対応しています。コードをより効率的にするために、それらすべてを 1 つの case ステートメントにグループ化するにはどうすればよいでしょうか**

4

4 に答える 4

9

ケースを使用して画像を選択しているように見えますが、常に同じ処理を画像に適用します。

画像をリストまたは辞書に保存し、そのmole値を使用して正しい画像を取得し、その画像を処理するのはどうですか?

何かのようなもの

Dictionary<int, PictureBox> images;
var image = images[mole];
// do stuff to image

画像がすべて順番に番号付けされている場合、List の方がわずかに効率的です。リストのインデックスは 0 ベースであることに注意してください。switchステートメントのように 1 から画像に番号を付ける場合(次の例で想定)、それに応じて調整することを忘れないでください。

List<PictureBox> images;
int index = mole - 1; // Assumes mole starts with 1, so adjust to 0-based index
var image = images[index];
于 2012-07-02T20:19:45.783 に答える
3

で異なるのswitchはpN変数です。これらのオブジェクトを個別の変数に配置する代わりに、インデックスを作成できる配列を作成します。

var p = new [] { p01, p02, .... }

そして、コードは次のようになります。

if (p[mole-1].Image == pmiss.Image && MoleHill.Image == pHill.Image)
{
    molesmissed ++;
}
p[mole-1].Image = MoleHill.Image
于 2012-07-02T20:21:59.887 に答える
1

PictureBoxes をリストに入れ、インデックスでアクセスできます。

List<PictureBox> pbs = new List<PictureBox>();
foreach(Control c in this.Controls) if( c is PictureBox ) pbs.Add( (PictureBox)c );

private void MakeMoleVisible(Int32 mole) {
    pbs[ mole ] = // whatever
}
于 2012-07-02T20:20:25.297 に答える
0

これを試して:

        string ControlIdSuffix = mole < 10 ? "0" : "" + mole.ToString();
        Control[] picBoxes = this.Controls.Find("p" + ControlIdSuffix, true);
        if (picBoxes.Length > 0)
        {
            PictureBox p = picBoxes[0] as PictureBox;
            if (p != null) {
               if (p.Image == pmiss.Image && MoleHill.Image == pHill.Image)
                  molesMissed++;
               p.Image = MoleHill.Image;
            }
        }
于 2012-07-02T20:27:08.167 に答える