2013-02-03 31 views
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和相關的類來完成這個,但我不確定如何繼續,如果它甚至會給我我追求的結果。我意識到這隻會幫助我設計師,但那很好。

回答

2

還有另外一種選擇。您可以使用partial classes並將通用代碼放在可從兩個項目鏈接到的單個文件中。

+2

有趣。所以我將創建一個包含部分類MyControl的文件,其中包含所有常用的東西,然後在WinForms項目中創建一個類文件並聲明相同的部分類,並從System.Windows.Forms派生它。控制「,將第一個文件鏈接到項目中,然後對另一個項目中的ASP.NET控件執行相同操作。我理解正確嗎? – MarcelB

+1

接受你的答案,因爲它是一個更簡單,更優雅的問題方法。謝謝。 – MarcelB