如何从另一个类访问表单元素

3
我有以下的代码。
   namespace Spaceship_Invaders
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
                Image myImage = Image.FromFile("image/Untitled.png");
                pictureBox1.Image = myImage;
            }

            public class spaceship { 
                Image myimage = Image.FromFile("image/Untitled6.png");
                Form1 myform = new Form1();
                 myform.pictureBox1.Image = myimage;            


            }

        }
    }

我在窗体中有一个PictureBox,我希望能够从飞船类(Spaceship class)访问该PictureBox,但我无法访问它。应该如何解决?


1
在发问之前,请先做好功课。这是面向对象编程中的基本问题。 - Alberto De Caro
2个回答

2

[已编辑] 您可以通过以下方式访问它:

public class spaceship
{ 
    Image myimage = Image.FromFile("image/Untitled6.png");
    Form1 myform = new Form1();

    spaceship()
    {
        myform.pictureBox1.Image = myimage;             
    }
}

请看这里

(这是关于IT技术的内容)

谢谢,现在它完美地工作了。我可以问一下为什么需要 spaceship() 来访问 picturebox 吗?为什么不能直接从 spaceship 类中访问它? - asdfkjasdfjk
当然可以。spaceship()是名为Constructorspaceship类的特殊方法。在类体中,您只能声明类成员(也可以初始化它们)。为了设置它们的值,您应该使用方法。 - Hossein Narimani Rad

0

不要使用公共字段,而是创建一个公共属性From1.TheImage来设置PictureBox的图像。

这样可以实现检查、跨线程安全(如果需要)以及在不更改SpaceShip类的情况下将PictureBox替换为其他内容。

阅读此帖子:SO public fields/properties 了解公开字段的风险。

    public partial class Form1 : Form
    {

        public Image MyImage
        {
            get { return pictureBox1.Image; }
            set { 
                  //do some checks if neccessary
                  pictureBox1.Image = value; 
                }
        }

        public Form1()
        {
            InitializeComponent();
        }
    }

网络上有大量关于C#的文档资料。 但我会在上面给出一个简短的例子。 - user1064248

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接