我使用Windows窗体控件库创建了一个自定义UserControl
。我想创建一个UserControl
的属性,我可以添加项目,然后我可以选择像comboBox这样的项目。
答案 0 :(得分:2)
WinForms允许您创建丰富的设计时环境,并在运行时为您定义的某些属性提供自定义编辑器。
例如,如果我将MessageQueue
组件放到我的WinForms表单上并查看属性窗口,我可以看到名为 Formatter 的属性。
单击 Formatter 属性会显示一个下拉框,其中显示预设的值列表。这是 UI类型编辑器的示例。
执行此操作的一种方法是为支持的值定义枚举(如果您愿意,可以是动态列表)。
public enum Muppets
{
Kermit,
MissPiggy,
Fozzie
}
...然后定义从UITypeEditor
派生的自己的编辑器(参见下面的MSDN链接)
class MyMuppetEditor : UITypeEditor { ... }
...您将其附加到您希望获得下拉菜单的控件的属性中:
[Category("Marquee")]
[Browsable(true)]
[EditorAttribute(typeof(MyMuppetEditor),
typeof(System.Drawing.Design.UITypeEditor))]
public Muppets Muppet {get ; set; }
有关更多详细信息,请查看以下链接。
编辑:要允许动态列表,请尝试将该属性设为字符串,因为选择将绑定到的内容以及EditValue()
期间显示您的SelectionControl时只显示动态项目的列表框
答案 1 :(得分:0)
您可以使用CategoryAttribute类来完成此操作。
示例:
[Description("Description of property here"), Category("Design")]
public bool my_property;
查看MSDN页面,了解有关如何使用它的更完整参考。
编辑:如果想要拥有bool属性,请使用此示例。
private bool my_bool = true; // this is its default value
[PropertyTab("Property Tab Name")]
[Browsable(true)]
[Description("Description of Property"), Category("Data")]
public bool my_property
{
get { return my_bool; }
set { my_bool = value; }
}
答案 2 :(得分:0)
我删除了我的最后一个答案,因为我误解了你的观点。
简单解决方案需要Collection
enum
作为财产。 Designer属性网格将自动为您在已初始化的Collection
中使用ComboBox进行选择。显示的名称也是enum
的名称。
E.g。 (我为TextBox创建的只允许某种类型值的东西)
enum
:
enum EnumSupportedType
{
Integer = 1,
Double
}
该物业所在的类别:
public class NumericTextBox : TextBoxBase, INumericControl
{
private EnumSupportedType _supportedType = EnumSupportedType.Integer;
public EnumSupportedType SupportedType {
get { return _supportedType; }
set { _supportedType = value; }
}
}
然后在ComboBox(在Designer属性网格中)中建议这些项目:
如果你不能使用枚举,你可以参考Providing a Custom UI for Your Properties这似乎是一个更难实现的解决方案,但会解决你的问题。
我希望它会对你有所帮助。