我对属性使用DefaultValue,因此当我在设计器中创建具有此属性的控件时,它不会在设计器中生成。但是,对于具有数据类型的属性不是标准的,例如:Image,如何创建默认值。感谢。
这是一个示例代码:
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是我在项目中添加的Image资源。
我创建一个名为Form1的表单,将MyControl拖到此表单,它的名称是myControl1。我打开Form1.designer.cs来查看生成的代码,我仍然看到myControl1的Img属性。为什么?我使用DefaultValue但它没有影响。请帮我。感谢。
答案 0 :(得分:1)
在您的代码中,您将String
值分配给DefaultValueAttribute
属性的Image
。
您无法以这种方式使用DefaultValueAttribute
。
要让设计师在DefaultValueAttribute
不符合条件的情况下工作,替代方法是创建两种方法:ResetPropertyName
和ShouldSerializePropertyName
。
设计人员将使用这两种方法代替属性,启用重置菜单命令,避免将不需要的代码生成 .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); }