我有以下代码:
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社区。 p>
由于
编辑:澄清一下,我的意思是当我将ToolstripNumericUpDown
添加到ContextMenuStrip
时,该属性不会显示在VS设计器的属性网格中 - 事实上,点击我的控件不做任何更改到物业网格;属性网格仍显示先前选定控件的属性。
编辑2:情节变浓。如果我选择控件的父ToolStripMenuItem,然后访问它的DropDownItems,我可以看到我的控件,我可以看到并编辑它的所有属性。
答案 0 :(得分:0)
Control是通用类,用于显示进行类型转换以将Control转换为特定类型(NumericUpDown)所需的小数位。
下面的代码可以使用:
public CustomToolStripControlHost(Control c)
: base(c)
{
NumericUpDown numUpDown = (NumericUpDown)c;
numUpDown.DecimalPlaces = 10;
}