2011-05-16 57 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); }