我项目的一些背景知识: 我正在创建一个多表单应用程序,它由1个mainform和6个可以从mainform调用的子表单组成,但一次只能激活1个子表单。这些子表单共享代码的某些部分,我不想复制。为了解决这个问题,我在相同的命名空间中有一个代码文件,它保存了nessaccary代码。 但是,此代码文件需要访问当前活动子窗体的某些属性。 我的搜索归结为使用接口从活动子表单中提取所需信息。
我的代码目前看起来像这样:
接口
public interface Interface1
{
TabControl tabControl_Buizen_
{
get;
}
TabPage tabPage_plus_
{
get;
}
}
Childform:
public partial class Childform : Form, Interface1
{
Interface1 dummy;
public TabControl tabControl_Buizen_
{
get { return this.tabControl_Buizen; }
}
public TabPage tabPage_plus_
{
get { return this.tabPage_plus; }
}
Methods_newTabPage methods = new Methods_newTabPage(dummy);
}
的CodeFile:
public class Methods_newTabPage
{
private readonly Interface1 form;
public Methods_newTabPage(Interface1 formInterface)
{
this.form = formInterface;
}
}
正如您所看到的,我使用Methods_newTabPage methods = new Methods_newTabPage(dummy);
来调用我的代码文件中的方法,但代码文件需要传递接口(我将其填充为" dummy" )。然而,这会弹出错误"字段初始化程序无法引用非静态字段,方法或属性Childform.dummy"。
如何让childforms访问代码文件中的方法,同时还让代码文件可以访问不同子元素中的某些控件?
答案 0 :(得分:0)
尝试添加初始化字段methods
的构造函数。
此外,我也看不出那个假人是否有意义。而是通过构造函数中的methods = new Methods_newTabPage(this);
初始化方法。
答案 1 :(得分:0)
错误很容易修复:只需将dummy
设为静态。
static Interface1 dummy;
但是,我认为这对你没什么帮助。为什么要将此dummy
传递给Methods_newTabPage
?这会在代码文件中导致NullReferenceExceptions
,因为dummy
从未使用任何内容进行初始化。
您是否宁愿传递this
,即Childform
的当前实例?
但你不能像dummy
那样只交换this
:
// Compiler error "Keyword 'this' is not available in the current context".
Methods_newTabPage methods = new Methods_newTabPage(this);
相反,您必须添加一个创建Methods_newTabPage
的构造函数:
public partial class Childform : Form, Interface1
{
private Methods_newTabPage methods;
public Childform()
{
methods = new Methods_newTabPage(this);
}
public TabControl tabControl_Buizen_ { get { return this.tabControl_Buizen; } }
public TabPage tabPage_plus_ { get { return this.tabPage_plus; } }
}