2011-05-16 71 views
0

我對屬性使用DefaultValue,以便在設計器中創建一個在設計器中具有此屬性的控件時,它不會在設計器中生成。但是,具有數據類型不屬於標準的屬性,例如:圖像,如何創建默認值。謝謝。創建一個不在設計器中生成的屬性

這是一個例子代碼:

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Windows.Forms; 
using System.Drawing; 
using System.ComponentModel; 

namespace DemoChart 
{ 
    public class MyControl : Control 
    { 
    private Image m_Img = DemoChart.Properties.Resources.link; 

    [DefaultValue("DemoChart.Properties.Resources.link")] 
    public Image Img 
    { 
     get { return m_Img; } 
     set { m_Img = value; } 
    } 

    public MyControl() 
    { 
    } 
    } 
} 

注:DemoChart.Properties.Resources.link是一種圖像資源,我在項目中添加。

我創建一個名爲Form1的窗體,將一個MyControl拖到這個窗體上,它的名字是myControl1。我打開Form1.designer.cs查看生成的代碼,我仍然看到myControl1的Img屬性。爲什麼?我使用DefaultValue,但它沒有影響。請幫幫我。謝謝。

+0

它會調用錯誤嗎?你有空白的照片嗎? – soandos 2011-05-16 10:53:38

+0

你的'Img'屬性是否返回圖片? – jams 2011-05-16 11:10:32

+0

我更新了我的問題。請幫幫我。謝謝。 – 2011-05-16 12:40:46

回答

1

在您的代碼中,您將String值分配給Image屬性的DefaultValueAttribute。 這種方式不能使用DefaultValueAttribute

對於設計師工作,其中DefaultValueAttribute不符合條件,替代方法是創建兩種方法:ResetPropertyNameShouldSerializePropertyName。 這兩種方法都會由設計師代替屬性的使用,使復位菜單命令,避免產生不必要的代碼轉換成了.Designer.cs文件

您的代碼應該成爲這樣的:

private Image m_Img = DefaultImg; 
public Image Img 
{ 
    get { return m_Img; } 
    set { m_Img = value; } 
} 

private static readonly Image DefaultImg = DemoChart.Properties.Resources.link; 
private void ResetImg() { Img = DefaultImg; } 
private bool ShouldSerializeImg() { return (Img != DefaultImg); } 
相關問題