从其他类访问时不显示文本框消息

时间:2013-03-29 12:07:04

标签: c# winforms

我有以下代码

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不会显示任何内容。请告诉我这里缺少的东西。

3 个答案:

答案 0 :(得分:3)

您正在设置与您正在显示的表单实例不同的表单实例上的文本。 spaceship类在此处创建一个新表单:

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();

}

答案 1 :(得分:1)

您需要将Form作为变量传递并存储在您的Spaceship类中。

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();

我个人可能会使用Properties做这样的事情。

 public class Spaceship
 { 
      public String Name { get; set; }     
      public Spaceship(string name)
      {
         Name = name;
      }   
 }

在按钮内使用以下内容。

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

答案 2 :(得分:1)

我建议稍微改变你的设计,所以每个班级都有自己的责任:

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";               
        }
    }
}