假设我想开发一个定制的、纯图形控件,可以在WinForms和ASP.NET中使用。根据一些属性设置和相关规则,该控件将呈现出一幅图片。
显然,我可以直接将WinForms版本的代码复制到ASP.NET版本中,但这意味着如果发现错误或更改规则,我需要更新两个版本。
我可以编写一个核心类,其中包含所需的各种属性和规则,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
和相关类来完成这个任务,但我不确定如何继续操作,以及它是否会给我想要的结果。我意识到这只会对设计器有所帮助,但没关系。
MyControl
的部分类,其中包含所有通用内容,在WinForms项目中创建一个类文件并声明相同的部分类,从System.Windows.Forms.Control
派生它,将第一个文件链接到项目中,然后在另一个项目中为ASP.NET控件执行相同操作。我理解的对吗? - MarcelB