自定义控件不会在设计器中公开图像属性

本文关键字:图像 属性 自定义控件 | 更新日期: 2023-09-27 17:55:39

我做了一个自定义的跟踪栏控件,主要作为一个练习。我知道我可以/应该继承我需要的东西,而不是重新发明轮子,但我在努力中学到了很多东西。现在,我有很多属性,除了几个图像属性外,所有这些属性都显示在设计器中。这就是我所拥有的,以其他工作属性为模型(那些是整数和颜色,什么不是,它们都按预期工作......),所以也许我应该以其他方式做图像。底线,我不知道我在做什么:)

编辑:我的自定义控件位于 Windows 窗体解决方案(VC# 2008 Express)中,澄清一下,我的问题是我的控件的某些属性(图像属性)在设计时未显示在属性选项卡中。

编辑 2 :在阅读了 DependencyProperty 并且完全无法理解这个概念之后(我在 programmin the codez 或你们大师所说的黑巫毒魔法方面非常菜鸟??我已经习惯了让 IDE 解决我所有的麻烦,我很高兴看到 IDE 愉快地展示我的其他属性,例如Color BarColorint Value等。为什么Image LeftImage会有所不同,许多标准控件都具有 Image 属性,也许我认为 IDE 可以解决我的所有错误是天真,但可以肯定的是,Microsoft 的家伙不会每次都必须在控件中设置图像属性时构建新的编辑器。我敢打赌,他们重用了一些东西,我也应该能够做到。

我被困住了:(

无论如何,这是我蹩脚的CoD3Z:

private Image _LeftImage;
    /// <summary>
    /// Sets the small image appearing to the left of the trackbar
    /// </summary>
    [Description("The small image appearing to the left of the trackbar"),
    Category("Appearance"),
    DefaultValue(typeof(Image),"null"),
    Browsable(true), EditorBrowsable(EditorBrowsableState.Always)]
    public Image LeftImage
    {
        private get { return _LeftImage; }
        set
        {
            if (value.Height != 16 || value.Width != 16)
            {
                _LeftImage = new Bitmap(value,new Size(16,16));
            }
            else _LeftImage = value;
            Invalidate();
        }
    }

顺便问一下,DefaultValue 和 DefaultValueAttribute 有什么区别?

感谢您的任何指示和帮助!/米凯尔

自定义控件不会在设计器中公开图像属性

我在这里找到了一些东西:http://msdn.microsoft.com/en-us/library/system.drawing.design.imageeditor.aspx

考虑一下这个问题解决了。

对于在设计器中显示图像,您需要覆盖绘制它的 OnPaint 方法。

DefaultValue 与 DefaultValueAttribute 相同。.NET 中的所有属性都是从 System.Attribute 继承的分支,所有这些类都类似于 Name*Attribute*,其中属性是固定的。那么"默认值"就像一个别名。

您的示例没有显示您的问题到底是什么,但是如果您创建自定义控件并希望从设计器访问其属性,则应像这样使用 smth:

        public static readonly DependencyProperty ValueProperty =
        DependencyProperty.Register("Value", typeof(object), typeof(CustomControl),
        new FrameworkPropertyMetadata(null, ValueChanged));

希望这对你有帮助