C# Don';从其他类访问时不显示文本框消息

C# Don';从其他类访问时不显示文本框消息,c#,winforms,C#,Winforms,我有以下代码 namespace Spaceship_Invaders { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public class spaceship { Form1 myform = new Form1();

我有以下代码

namespace Spaceship_Invaders
{
    public partial class Form1 : Form
    {

        public Form1()
        {
            InitializeComponent();

        }

        public class spaceship
        {

            Form1 myform = new Form1();           

            public void mspaceship()
            {              
                myform.textBox1.Text = " working";               


            }
        }

        private void button4_Click(object sender, EventArgs e)
        {
            spaceship myspaceship = new spaceship();
            myspaceship.mspaceship();

        }


    }
}

当我点击按钮textbox1时,不显示任何内容。请告诉我这里缺少什么。

您正在将文本设置在不同的表单实例上,而不是您正在显示的表单实例上。
太空船
类在这里创建了一个新形式:

Form1 myform = new Form1(); 
并继续使用它。这不是可见形式,因此您无法看到效果

您需要传入
Form1
实例才能使其工作,而
spaceship
可能应该将其作为构造函数参数。您可以使用
this
关键字在实例方法中获取对当前实例的引用。一个有效的例子是:

public class spaceship
{
    public spaceship(Form1 form)
    {
        myForm = form;
    }

    Form1 myform;

    public void mspaceship()
    {              
        myform.textBox1.Text = " working";               


    }
}

private void button4_Click(object sender, EventArgs e)
{
    spaceship myspaceship = new spaceship(this);
    myspaceship.mspaceship();

}

您需要将
表单
作为变量传递,并将其存储在您的太空船类中

public class Spaceship
{ 
     Form1 _form;       
     public Spaceship(Form1 myform)
     {
        _form = myform;
     }   

     public void mspaceship()
     {              
          _form.textBox1.Text = " working";                
     }
}
然后在当前类的按钮传递中:

Spaceship myspaceship = new Spaceship(this);
myspaceship.mspaceship();
就我个人而言,我可能会用这种方式做一些事情

在按钮内部,您可以使用以下命令

Spaceship spaceship = Spaceship("Enterprise");
this.textBox1.Text = spaceship.Name;

我建议您稍微改变一下设计,这样每个类都有自己的责任:

namespace Spaceship_Invaders
{
    public partial class Form1 : Form
    {
        private Spaceship _myspaceship;

        public Form1()
        {
            InitializeComponent();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            _myspaceship = new spaceship();
            this.textBox1.Text = myspaceship.mspaceship();
        }
    }

    public class Spaceship
    {
        public string mspaceship()
        {              
            return " working";               
        }
    }
}

只是对最佳实践的观察,这将帮助其他人更好地理解您的代码。你的
太空船
类名应该是
太空船
。类应以大写字符开头。这使得区分类和它们的实例变得更容易。你的设计有点混乱。太空船不应该负责在文本框中填充文本。表格本身应该填写宇宙飞船提供的文本框中的文本。嗨,谢谢你的回答。我在许多代码中看到了使用“u”的情况,就像您使用的u表单一样。这是什么意思?它指的是私有变量。Private表示不能在类之外访问变量。
namespace Spaceship_Invaders
{
    public partial class Form1 : Form
    {
        private Spaceship _myspaceship;

        public Form1()
        {
            InitializeComponent();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            _myspaceship = new spaceship();
            this.textBox1.Text = myspaceship.mspaceship();
        }
    }

    public class Spaceship
    {
        public string mspaceship()
        {              
            return " working";               
        }
    }
}