我有以下代码
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不会显示任何内容。请告诉我这里缺少的东西。
答案 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";
}
}
}