我在Form1
中安装了一个类,我希望将其称为Form2
这是可能的吗?
例如:
public TheClass thClass; //member from Form1
/* ... */
public void foo() {
thClass = new TheClass(...);
}
表格2:
public void baa() {
Form1 form1 = new Form1();
form1.thClass.MethodName( .. ) ;
}
在.baa()
中调用Form2
方法时,我收到以下错误消息:
Object reference not set to an instance of an object.
最好的方法是什么? ref
?
我想这样做不会再次实例化thClass。
我希望这很清楚。提前致谢。
答案 0 :(得分:2)
您收到此异常是因为thClass
为null
- 在您的示例中,您必须在使用foo()
之前致电thClass
。
引用类型字段没什么特别之处 - 它们可以像类的任何其他公共字段一样被访问(并且Form1
是一个类)。一般情况下,你会想要使用一个属性而避免使用公共字段,因为对它们的任何更改都会破坏现有的使用者 - 这个属性只能由你所表达的拥有类来设置
public TheClass SomeClass {get; private set;}
答案 1 :(得分:0)
你应该调用Foo()初始化“Class”....
public void baa() {
Form1 form1 = new Form1();
form1.foo();
form1.thClass.MethodName( .. ) ;
}
答案 2 :(得分:0)
因为你在foo方法中初始化thClass,所以你只需在使用thClass之前调用该方法
public void baa() {
Form1 form1 = new Form1();
form1.foo();
form1.thClass.MethodName( .. ) ;
}
或者您可以直接初始化
public void baa() {
Form1 form1 = new Form1();
form1.thClass = new TheClass(...);
form1.thClass.MethodName( .. ) ;
}
答案 3 :(得分:0)
最好的方法可能是将Form1中的Class实例传递给Form 2的构造函数。
// Code from Form 1
public partial class Form1 : Form
{
private TheClass thClass;
public Form1()
{
InitializeComponent();
}
public void foo()
{
thClass = new TheClass(...);
}
private void button1_Click(object sender, EventArgs e)
{
Form2 objForm2 = new Form2(thClass);
objForm2.Show();
}
}
// Code From Form 2
public partial class Form2 : Form
{
private TheClass thClass;
public Form2(TheClass thCls)
{
thClass = thCls;
InitializeComponent();
}
private void baa(object sender, EventArgs e)
{
thClass.MethodName( .. );
}
}