使用c#创建自定义UserControl

时间:2015-07-30 09:07:44

标签: c# winforms

我使用Windows窗体控件库创建了一个自定义UserControl。我想创建一个UserControl的属性,我可以添加项目,然后我可以选择像comboBox这样的项目。

3 个答案:

答案 0 :(得分:2)

WinForms允许您创建丰富的设计时环境,并在运行时为您定义的某些属性提供自定义编辑器。

例如,如果我将MessageQueue组件放到我的WinForms表单上并查看属性窗口,我可以看到名为 Formatter 的属性。

enter image description here

单击 Formatter 属性会显示一个下拉框,其中显示预设的值列表。这是 UI类型编辑器的示例。

enter image description here

执行此操作的一种方法是为支持的值定义枚举(如果您愿意,可以是动态列表)。

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这似乎是一个更难实现的解决方案,但会解决你的问题。

我希望它会对你有所帮助。