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个case语句,每个语句对应一个不同的图片框;我如何将它们组合到一个case语句中,以便我的代码可以更高效**
发布于 2012-07-03 04:27:08
试试这个:
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-03 04:19:46
看起来您的案例是用来选择图像的,然后您总是对图像应用相同的处理。
如何将图像存储在列表或字典中,使用mole值检索正确的图像,然后处理该图像?
就像这样
Dictionary<int, PictureBox> images;
var image = images[mole];
// do stuff to image如果所有图像都是按顺序编号的,则列表的效率会稍微高一些。请记住,列表索引是从0开始的。如果您从1开始对图像进行编号,就像您的switch语句中的情况一样(假设在下面的示例中),请记住进行相应的调整。
List<PictureBox> images;
int index = mole - 1; // Assumes mole starts with 1, so adjust to 0-based index
var image = images[index];发布于 2012-07-03 04:22:00
switch的不同之处在于pN变量。不是将这些对象放在离散变量中,而是创建一个可以索引到的数组:
var p = new [] { p01, p02, .... }然后你的代码可以看起来像这样:
if (p[mole-1].Image == pmiss.Image && MoleHill.Image == pHill.Image)
{
molesmissed ++;
}
p[mole-1].Image = MoleHill.Imagehttps://stackoverflow.com/questions/11300575
复制相似问题