如何在设计时填写List属性?

时间:2011-12-04 17:48:55

标签: c# custom-component

我有一个像这样的组件:

public partial class FontScalingManager : Component
{
    ...other stuff...

    /// <summary>
    /// List of Controls, which get their Font scaled
    /// </summary>
    [ListBindable(BindableSupport.Yes),
    Description("List of Controls, which get their Font scaled")]
    public List<Control> ScalingControls
    {
        get { return _scalingControls; }
    }
}

因此,在Form上删除此Component后,我想在设计器中填写此列表。我更喜欢在设计器中使用UITypeEditor或其他方法手动执行此操作,方法是选择表单中的某些控件。

按原样,设计师会自动给我一个编辑器来添加新的控件到这个列表,所以如何设法告诉它,我想从所有现有的控件中进行选择?

我可以为该编辑器设置一些内容,还是需要自定义编辑器?

感谢每一位帮助。

2 个答案:

答案 0 :(得分:2)

IExtenderProvider接口是为了做到这一点。 .NET HelpProvider组件以这种方式实现。请注意它如何将属性添加到同一表单上的其他控件。使用MSDN Library文章中的the example可以获得有关如何正确实现它的基本指导。

答案 1 :(得分:0)

控件具有Tag属性。将标记设置为缩放控件的“缩放”。然后在第一次访问它们时确定缩放控件:

private List<Control> _scalingControls;
public List<Control> ScalingControls
{
    get
    {
        if (_scalingControls == null) {
            _scalingControls = new List<Control>();
            foreach (Control c in frm.Controls) {
                if ((string)c.Tag == "scaling") {
                    _scalingControls.Add(c);
                }
            }
        }
        return _scalingControls;
    }
}