Невозможно сделать свойство пользовательского элемента управления видимым в конструкторе
У меня есть следующий код:
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;
}