在课程之间传播两种方式

时间:2016-09-02 13:36:32

标签: c# .net

我项目的一些背景知识: 我正在创建一个多表单应用程序,它由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访问代码文件中的方法,同时还让代码文件可以访问不同子元素中的某些控件?

2 个答案:

答案 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; } }
}