Невозможно сделать свойство пользовательского элемента управления видимым в конструкторе

У меня есть следующий код:

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 собственность отказывается показываться в дизайнере, несмотря на перестройку проекта, закрытие и повторное открытие дизайнера и т. д. Кто-нибудь может пролить свет на это?

Я использую VS 2013 Community, ориентируясь на.NET 4.

Спасибо

РЕДАКТИРОВАТЬ: Чтобы уточнить, я имею в виду, что свойство не отображается в сетке свойств дизайнера VS, когда я добавляю ToolstripNumericUpDown к ContextMenuStrip - на самом деле, нажатие на мой элемент управления вообще не меняет сетку свойств; Сетка свойств по-прежнему показывает свойства из ранее выбранного элемента управления.

РЕДАКТИРОВАТЬ 2: сюжет утолщается. Если я выберу родительский элемент управления ToolStripMenuItem, а затем получу доступ к DropDownItems, я увижу свой элемент управления и смогу просмотреть и отредактировать все его свойства.

1 ответ

Элемент управления является универсальным классом, чтобы показать десятичные разряды, необходимые для преобразования типов для преобразования элемента управления в определенный тип (NumericUpDown).

Ниже код будет работать:

public CustomToolStripControlHost(Control c)
        : base(c)
    {
        NumericUpDown numUpDown = (NumericUpDown)c;
        numUpDown.DecimalPlaces = 10;
    }
Другие вопросы по тегам