当从另一个类访问时不要显示文本框消息
本文关键字:显示 文本 消息 另一个 访问 | 更新日期: 2023-09-27 18:06:33
我有以下代码
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不显示任何东西。
您正在将文本设置在与您正在显示的表单实例不同的表单实例上。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();
}
您需要将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();
我个人可能会使用属性做类似的事情。
public class Spaceship
{
public String Name { get; set; }
public Spaceship(string name)
{
Name = name;
}
}
在按钮内使用以下命令:
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";
}
}
}