Kha*_*aji 8 .net c# custom-controls winforms
我正在建立一个用户控件.目前它由一个文本框和一个按钮组成 - 作为一种学习体验.这将用作更有用的控制的基础.
我想添加一个DataSource,显示成员和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;
}
}
Run Code Online (Sandbox Code Playgroud)
更简单的选择可能是使用属性提供程序:
[AttributeProvider(typeof(IListSource))]
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用程序集限定名称吗?并指定编辑器?
[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")]
Run Code Online (Sandbox Code Playgroud)
实际上,只需指定程序集,就可以将其缩写为与版本无关:
[TypeConverter("System.Windows.Forms.Design.DataSourceConverter, System.Design")]
[Editor("System.Windows.Forms.Design.DataSourceListEditor, System.Design", typeof(UITypeEditor))]
Run Code Online (Sandbox Code Playgroud)
我将 ComplexBindingProperties 属性添加到我的 Control 类中,并将 AttributeProvider 添加到我的 DataSource 属性中
[ComplexBindingProperties("DataSource", "DataMember")]
public partial class SomeListControl : UserControl
Run Code Online (Sandbox Code Playgroud)
...
[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;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6081 次 |
最近记录: |