无法在设计器中显示自定义控件的属性

时间:2015-03-24 12:38:43

标签: c# winforms properties custom-controls windows-forms-designer

我有以下代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.Design;

namespace Tools
{
    [ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.All)]
    public class ToolStripNumericUpDown : CustomToolStripControlHost
    {
        private NumericUpDown nud;

        public ToolStripNumericUpDown()
            : base(new NumericUpDown())
        {
            this.nud = this.Control as NumericUpDown;


        }

        [Description("The number of decimal places"),
        Category("Custom"),
        EditorBrowsable(EditorBrowsableState.Always),
        Browsable(true),
        DesignerSerializationVisibility(DesignerSerializationVisibility.Visible),
        Bindable(true),
        DefaultValue(2)]
        public int DecimalPlaces
        {
            get { return nud.DecimalPlaces; }
            set { nud.DecimalPlaces = value; }
        }

        protected override void OnSubscribeControlEvents(Control control)
        {
            base.OnSubscribeControlEvents(control);
            //Add your code here to subscribe Control Events
        }

        protected override void OnUnsubscribeControlEvents(Control control)
        {
            base.OnUnsubscribeControlEvents(control);
            //Add your code here to unsubscribe control events.
        }
    }
}

并在另一个文件中:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.Design;

namespace System.Windows.Forms
{
    //[ToolStripItemDesignerAvailability(ToolStripItemDesignerAvailability.All)]
    public class CustomToolStripControlHost : ToolStripControlHost
    {
        public CustomToolStripControlHost()
            : base(new Control())
        {
        }

        public CustomToolStripControlHost(Control c)
            : base(c)
        {
        }
    }
}

DecimalPlaces属性拒绝出现在设计师中,尽管重建项目,关闭并重新打开设计师等等。任何人都可以对此有所了解吗?

我正在使用针对.NET 4的VS 2013社区。

由于

编辑:澄清一下,我的意思是当我将ToolstripNumericUpDown添加到ContextMenuStrip时,该属性不会显示在VS设计器的属性网格中 - 事实上,点击我的控件不做任何更改到物业网格;属性网格仍显示先前选定控件的属性。

编辑2:情节变浓。如果我选择控件的父ToolStripMenuItem,然后访问它的DropDownItems,我可以看到我的控件,我可以看到并编辑它的所有属性。

1 个答案:

答案 0 :(得分:0)

Control是通用类,用于显示进行类型转换以将Control转换为特定类型(NumericUpDown)所需的小数位。

下面的代码可以使用:

public CustomToolStripControlHost(Control c)
        : base(c)
    {
        NumericUpDown numUpDown = (NumericUpDown)c;
        numUpDown.DecimalPlaces = 10;
    }