【问题标题】:Create a property which is not generated in designer创建一个不在设计器中生成的属性
【发布时间】:2014-09-19 16:45:21
【问题描述】:

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

【问题讨论】:

  • 它是否调用错误?你得到一张空白图片吗?
  • 您的Img 属性是否返回图像?
  • 我更新了我的问题。请帮我。谢谢。
  • 当您创建myControl1 时,其Img 属性未设置为默认值?
  • 你知道DefaultValue的用途吗?我使用它来避免当我保持默认时在设计器中生成此属性的代码。谢谢。

标签: c# .net


【解决方案1】:

在您的代码中,您将String 值分配给Image 属性的DefaultValueAttribute。 你不能这样使用DefaultValueAttribute

如果设计师在DefaultValueAttribute 不符合条件的地方工作,另一种方法是创建两种方法:ResetPropertyNameShouldSerializePropertyName。 设计者将使用这两种方法代替属性,启用 Reset 菜单命令并避免在 .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); }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 2020-11-11
    相关资源
    最近更新 更多