如何在设计器“Collection Editor Windows”中制作可编辑对象?
How to make editable objects in the designers `Collection Editor Windows`?
我创建了一个自定义组件,派生自 TDataSet。
现在我从名为 gttTables
的自定义类型 dsTable
创建了一个集合。 (全部代码在下方)
当我将组件放在表单上时,集合 gttTables
出现在 property window
中,当我单击 3 点按钮时,Collection Editor Windows
按预期出现。
在 Collection Editor Windows
中,我可以单击 Add
,这将在 window 中添加一个新项目,它似乎是我预期的 dsTable
类型。
现在解决问题。
在 Collection Editor Windows
中,我无法 see/change 左侧列表中每个 dsTable
的任何属性。右侧只显示Value
值为gttControls.dsTable
.
让我告诉你我对这张图片的意思
我想在此处查看每个 dsTable
的属性添加到 Collection Editor Windows
,以便我可以编辑它们。
这是我的完整代码。
我的问题是我应该怎么做才能编辑 Collection Editor Windows
中每个添加的 dsTable
的属性?
public partial class gttDataSet : DataSet
{
Collection<dsTable> _dsTables = new Collection<dsTable>();
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Editor("System.ComponentModel.Design.CollectionEditor, System.Design", typeof(UITypeEditor))]
[Category("GTT")]
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
public Collection<dsTable> gttTables
{
get { return _dsTables; }
set { _dsTables = value; }
}
}
public class dsTable
{
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
string SelectText { get; set; }
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
string SelectTextForUpdate { get; set; }
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
string DesignWhereText { get; set; }
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
string UserWhereText { get; set; }
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
bool IsStoredProcedure { get; set; }
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
bool RetrieveColumns { get; }
}
编辑
我查看了 How do you create a custom collection editor form for use with the property grid?,虽然它包含有用的信息,但对我来说似乎没有必要。 @Serg 的回答解决了我的问题
您应该使 dsTable
class 属性 public
能够使用 PropertyGrid
编辑这些属性
public class dsTable
{
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
public string SelectText { get; set; } // <--- changed here
//make the same changes for other properties you want to edit.
}
我创建了一个自定义组件,派生自 TDataSet。
现在我从名为 gttTables
的自定义类型 dsTable
创建了一个集合。 (全部代码在下方)
当我将组件放在表单上时,集合 gttTables
出现在 property window
中,当我单击 3 点按钮时,Collection Editor Windows
按预期出现。
在 Collection Editor Windows
中,我可以单击 Add
,这将在 window 中添加一个新项目,它似乎是我预期的 dsTable
类型。
现在解决问题。
在 Collection Editor Windows
中,我无法 see/change 左侧列表中每个 dsTable
的任何属性。右侧只显示Value
值为gttControls.dsTable
.
让我告诉你我对这张图片的意思
我想在此处查看每个 dsTable
的属性添加到 Collection Editor Windows
,以便我可以编辑它们。
这是我的完整代码。
我的问题是我应该怎么做才能编辑 Collection Editor Windows
中每个添加的 dsTable
的属性?
public partial class gttDataSet : DataSet
{
Collection<dsTable> _dsTables = new Collection<dsTable>();
[DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
[Editor("System.ComponentModel.Design.CollectionEditor, System.Design", typeof(UITypeEditor))]
[Category("GTT")]
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
public Collection<dsTable> gttTables
{
get { return _dsTables; }
set { _dsTables = value; }
}
}
public class dsTable
{
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
string SelectText { get; set; }
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
string SelectTextForUpdate { get; set; }
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
string DesignWhereText { get; set; }
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
string UserWhereText { get; set; }
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
bool IsStoredProcedure { get; set; }
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
bool RetrieveColumns { get; }
}
编辑
我查看了 How do you create a custom collection editor form for use with the property grid?,虽然它包含有用的信息,但对我来说似乎没有必要。 @Serg 的回答解决了我的问题
您应该使 dsTable
class 属性 public
能够使用 PropertyGrid
public class dsTable
{
[Browsable(true)]
[EditorBrowsable(EditorBrowsableState.Always)]
[Editor("System.ComponentModel.Design.MultilineStringEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
public string SelectText { get; set; } // <--- changed here
//make the same changes for other properties you want to edit.
}