4

假设我想开发一个自定义的纯图形控件,用于 WinForms 和 ASP.NET。该控件将根据某些属性设置和相关规则呈现图像。

显然,我可以将代码从 WinForms 版本复制到 ASP.NET 版本,但这意味着如果发现错误或更改规则,我有两个版本要更新。

我可以编写一个核心类,其中包含所需的各种属性和规则,WinForms 和 ASP.NET 控件类将具有指向该核心类的属性,例如:

public class MyControlCore
{
    // all properties and control rules

    public void PaintTo(Graphics graphics)
    {
        // rendering of control
    }
}

public class MyWinFormsControl: Control
{
    public MyWinFormsControl(Control parent): base(parent)
    {
        CoreControl = new MyControlCore();
    }

    public MyControlCore CoreControl { get; private set; }

    protected override OnPaint(object sender, PaintEventArgs e)
    {
        CoreControl.PaintTo(e.Graphics);
    }
}

这会起作用,但在属性网格中我会得到一个CoreControl包含自定义属性的属性。有没有办法让属性网格显示MyControlCore属性,而不是CoreControl带有子属性的属性?

我在想我也许可以通过TypeDescriptionProvider相关的课程来完成这个,但我不确定如何进行,以及它是否会给我我想要的结果。我意识到这只会对我的设计师有所帮助,但这很好。

4

1 回答 1

2

还有另一种选择。您可以使用部分类并将公共代码放在一个文件中,您可以从两个项目链接到该文件。

于 2013-02-03T14:21:12.443 回答