创建一个未在设计器中生成的属性

时间:2011-05-16 10:51:02

标签: c# .net

我对属性使用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但它没有影响。请帮我。感谢。

1 个答案:

答案 0 :(得分:1)

在您的代码中,您将String值分配给DefaultValueAttribute属性的Image。 您无法以这种方式使用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); }