【问题标题】:C# Reflection with Picture Box带有图片框的 C# 反射
【发布时间】:2015-07-07 01:41:16
【问题描述】:

我想做以下事情:

          string WhoIsTheSender="pictureBox1";

        switch (WhoIsTheSender)
        {
           case "pictureBox1":  
                    pictureBox1.Image = Properties.Resources.ledOff; 
                    break;
           case "pictureBox2":  
                    pictureBox2.Image = Properties.Resources.ledOff;
                    break;
            //....until case "pictureBox64":  pictureBox64.Image = Properties.Resources.ledOff;
                    break;
        }       

有没有办法让它更短?如何使用反射?

string WhoIsTheSender="pictureBox1";
        WhoIsTheSender.Image = Properties.Resources.ledOff; //in this specific example WhoIsTheSender="pictureBox1";            

提前感谢您的帮助!

【问题讨论】:

  • 是的,这是一个活动,基本上我有 64 个图片框用于同一个活动。我不想单独处理所有事件,所以我只有 1 个事件。单击特定框后,我将获得图片框的名称。假设我点击了一个名为“pictureBox1”的图片框。我得到了字符串本身,但现在我想用这个字符串来修改那个图片框图像。
  • ((Control)sender).Name 应该为您提供引发事件的图片框的名称。你也可以只做((Picturebox)sender).Image = Properties.Resources.ledOff;,我认为这里不需要反思。 sender 属性是对引发事件的控件的引用...
  • 对不起,我没有发布整个代码,只是简化版本。是的,我确实使用以下行获得了按钮的名称: string WhoIsTheSender = ((PictureBox)sender).Name;
  • 除了使用字典之外,我没有办法使用图片框的名称作为修饰符吗?例如:字符串 WhoIsTheSender="pictureBox1"; WhoIsTheSender.Image = Properties.Resources.ledOff;

标签: c# oop reflection picturebox


【解决方案1】:

是的,这是一个活动,基本上我有 64 个图片框可以参加同一个活动。我不想单独处理所有事件,所以我只有 1 个事件。

您需要的信息已经在事件的sender 参数中可用。

如果您确定sender 始终是PictureBox,那么一行(非反射)就可以了:

(PictureBox(sender)).Image = Properties.Resources.ledOff;

如果您确定sender 类型,请先对其进行测试:

var picBox = sender as PictureBox;

if (picBox != null)
    picBox.Image = Properties.Resources.ledOff;

【讨论】:

  • 哇!太感谢了!那成功了!我被困了4个小时。我现在明白了。 Sender 对象是 object 类型,将其转换为 PictureBox 类型,然后访问其 .Image 属性。我正在做的是试图访问一个字符串的图像属性(这没有意义)。再次感谢您!
  • @RudolfBardos,如果它满足您的需求,您应该将其标记为答案。
猜你喜欢
  • 2013-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多