如何使用派生类C#在Windows.Forms中实现额外功能

时间:2018-03-07 12:38:50

标签: c# visual-studio

我希望能够通过“中间人”派生类自动创建具有一些额外功能的新窗体。

额外的功能使用一堆Win32 API调用,这些调用挂钩到表单的某些控件/事件中,并将其嵌入到另一个窗口中(比如将自定义表单嵌入到记事本或excel窗口中)

我创建了一个Form类的派生类,其具有如下额外功能:

public class MT4ChartForm : Form

我没有启动Windows窗体项目,我只是添加了Form作为我的MT4ChartForm类的基类

这里的想法是,如果我需要创建另一个windows.form以嵌入其他地方,我会创建一个新的Windows窗体项目,这将设置我像:

public class Form1 : Form

我只想重命名为:

public class Form1 : MT4ChartForm

希望自动将MT4ChartForm的功能“注入”我的新表单。

问题是视觉表单编辑器不喜欢它(删除错误屏幕),它可能会导致项目设置中的其他冲突:(

如何实现我想要做的事情,这不会破坏C#的规则?

1 个答案:

答案 0 :(得分:0)

这里的资源有所帮助。

我发现,设计者需要基类拥有一个没有参数的构造函数。

    //constructor
    public MT4ChartForm(IntPtr in_hwnd) : base()
    {
        _hwnd = in_hwnd;            
    }

    //needed by form designer
    private MT4ChartForm() : base() { }

我创建了一个私有构造函数,以避免与派生类混淆,设计人员对此感到满意。