4
假設我想開發一個自定義的純圖形控件,以用於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派生它。控制「,將第一個文件鏈接到項目中,然後對另一個項目中的ASP.NET控件執行相同操作。我理解正確嗎? – MarcelB
接受你的答案,因爲它是一個更簡單,更優雅的問題方法。謝謝。 – MarcelB