10

我正在构建一个用户控件。目前它由一个文本框和一个按钮组成 - 作为一种学习体验。这将用作更有用的控制的基础。

我想添加一个数据源、显示成员和 ValueMember。
这是我的数据源代码。它将显示在属性编辑器中,但被禁用并变灰。我错过了什么?

    private object MyDataSource;

    [Browsable(true)]
    [TypeConverter("System.Windows.Forms.Design.DataSourceConverter")]
    [System.ComponentModel.Bindable(true)]
    public object DataSource
    {
        get
        {
            return MyDataSource;
        }
        set
        {
            if (MyDataSource != value)
                MyDataSource = value;
        }
    }
4

2 回答 2

6

一个更简单的选择可能是使用属性提供程序:

[AttributeProvider(typeof(IListSource))]

您可以尝试使用程序集限定名称吗?并指定编辑器?

[TypeConverter("System.Windows.Forms.Design.DataSourceConverter, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]
[Editor("System.Windows.Forms.Design.DataSourceListEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", "System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a")]

实际上,您可以通过指定程序集将其缩写为与版本无关:

[TypeConverter("System.Windows.Forms.Design.DataSourceConverter, System.Design")]
[Editor("System.Windows.Forms.Design.DataSourceListEditor, System.Design", typeof(UITypeEditor))]
于 2009-01-25T22:51:24.207 回答
4

我将 ComplexBindingProperties 属性添加到我的 Control 类并将 AttributeProvider 添加到我的 DataSource 属性

[ComplexBindingProperties("DataSource", "DataMember")]
public partial class SomeListControl : UserControl

...

[Category("Data")]
[Description("Indicates the source of data for the control.")]
[RefreshProperties(RefreshProperties.Repaint)]
[AttributeProvider(typeof(IListSource))]
public object DataSource
{
    get { return _ultraGrid.DataSource; }
    set { _ultraGrid.DataSource = value; }
}

[Category("Data")]
[Description("Indicates a sub-list of the data source to show in the control.")]
[Editor("System.Windows.Forms.Design.DataMemberListEditor, System.Design", typeof(UITypeEditor))]    
public string DataMember
{
    get
    {
        return _ultraGrid.DataMember;
    }

    set
    {
        _ultraGrid.DataMember = value;
    }
}

参考:在 Windows 窗体控件中应用属性

于 2018-03-16T14:11:07.543 回答