WinForms和ASP.NET自定义控件的通用代码

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和相关类来完成这个任务,但我不确定如何继续操作,以及它是否会给我想要的结果。我意识到这只会对设计器有所帮助,但没关系。
1个回答

2

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


2
有趣。因此,我会创建一个文件,其中包含MyControl的部分类,其中包含所有通用内容,在WinForms项目中创建一个类文件并声明相同的部分类,从System.Windows.Forms.Control派生它,将第一个文件链接到项目中,然后在另一个项目中为ASP.NET控件执行相同操作。我理解的对吗? - MarcelB
1
接受了您的答案,因为它是解决问题更简单、更优雅的方法。谢谢。 - MarcelB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接