【问题标题】:I cannot change the image in pictureBox1 from code in C#我无法从 C# 中的代码更改 pictureBox1 中的图像
【发布时间】:2016-09-23 08:16:21
【问题描述】:

首先要做的事情:我对编程很陌生,我正在努力学习 C# 语言

我的目标:拥有一个改变pictureBox1中图片的方法。

问题:我收到错误消息,告诉我非静态字段需要对象引用。

这是我的班级的 sn-p 方法应该去哪里。

private class Execute
{
    private void valueChecker(char value)
    {
        for (int i = 0; i <= charLenght; i++)
        {
            if (value != CharArray[i])
            {
                i++;
            }

            else if (value == CharArray[i])
            {
                CorrectLetter(value);
                svalue = true;
            }
        }
        if (svalue == true)
        {
            /* This is where the command is happening.
             But I get error message : "An object reference is required for the non-static field, method or property."
            */

            pictureBox1.Image = photos[x];
            x++;
        }
    }

}

我也尝试在代码的其他地方创建新的类和方法,并从 if 语句中调用它,但我没有让它工作。

如果svalue == true,我需要更改pictureBox1中的图片

关于我到底在做什么的更多信息: 我正在制作一个刽子手游戏作为练习,如果在答案中找不到输入字母,我想更新 pictureBox1 中的图像。

图片存储在我称为照片[] 的数组中。

【问题讨论】:

  • 如果这正是代码,它没有意义。仅当您尝试在静态方法中访问非静态成员时才会发生该错误。
  • 实际上,如果您将Execute 放在 具有该图片框的表单类中,您也会收到该错误。
  • pictureBox1.Image 这是从哪里来的?它是您班级 Execute 的财产吗?您是否这样称呼您的方法:Execute.valueChecker('q')
  • 你的类需要一个对 PictureBox 的引用。你可以在创建类的实例后添加一个属性并设置它,甚至可以将它直接传递给构造函数..

标签: c# .net reference static


【解决方案1】:

你的方法声明应该是这样的:

public void valueChecker(char value,PictureBox pictureBox1)

【讨论】:

  • 感谢您的回复!这修复了错误,也为我了解编译器的工作原理提供了线索。
  • 这里的关键词是'references'和'scope'。
【解决方案2】:
 var MyImage = new Bitmap(photos[x]);
 pictureBox1.Image = (Image) MyImage ;

【讨论】:

  • 虽然这段代码 sn-p 可以解决问题,including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
【解决方案3】:

您的班级需要对PictureBox引用。您可以添加一个属性并在创建类的实例后设置它,甚至可以将它直接传递给构造函数..

private class Execute
{
   public PictureBox pBox {get; set;}

   public Execute(PictureBox  pb)
   {
        pBox  = pb;
   }

   private void valueChecker(char value)  // or maybe public ?!
   {
      ...
      ...

      if (pBox != null) pBox.Image = photos[x];
      x++;
    }
}

像这样创建类实例:

Execute someName = new Execute(pictureBox1);

请注意,还有其他方法可以解决此问题;这只是一个相当直接和直接的问题。如果您的课程是一种服务课程,您可能想要使用 Tarek 更直接的解决方案。请注意,他不仅将PictureBox 添加到参数列表中。他还制作了函数public

【讨论】:

  • 感谢您的回复!我没有尝试按照您的回答编写代码,因为 Tarek 的解决方案有效。但我会保存您的答案以供将来参考。
猜你喜欢
  • 1970-01-01
  • 2011-12-23
  • 2016-08-09
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 2022-11-28
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多