WinForm自定义控件的问题

shsoft888 2008-10-31 09:01:21
自定义控件的问题(WinForm)
我在自定义控件中加了一个属性List<abc>类型的。
在控件的购造函数中用new List<abc>给属性付了初值。
[Category("自定义"), DefaultValue(typeof(List<abc>)), Description("xxxxxx")]


可我在应用自定义控件时,C#设计环境总是有个警告。
说xxx对象无法转换为xxx对象,我的自定义控件在一个DLL文件中,和Form不是一个应用程序域。

其它类型的属性都可以解决,请问这种类型如何解决?还要在窗体的属性设计器中显示。
...全文
481 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
hq51814164 2012-10-25
  • 打赏
  • 举报
回复
怎么没人回答呀,菜鸟求高手正解
shsoft888 2008-11-02
  • 打赏
  • 举报
回复
看看微软的控件,好多控件都有集合属性的。

具体怎么实现的,看不了源代码。

55555555555555555555555,有没有热心的专家帮下忙啊。
shsoft888 2008-11-02
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 wuyazhe 的回复:]
不用那个属性了。自己实现就可以了

public List <LabelDisplayInfo> DisplayList
{
get { return _displayList == null ? new List <LabelDisplayInfo>(): _displayList; }
set { _displayList = value; }
}
[/Quote]

道理是一样的,还是不行。

我找了点资料,问题应该在反射上。
DLL和WinForm不在一个应用程序域,在设计时动态加载,要用反射机制。
qinhl99 2008-11-02
  • 打赏
  • 举报
回复
up
兔子-顾问 2008-11-02
  • 打赏
  • 举报
回复
不用那个属性了。自己实现就可以了

public List <LabelDisplayInfo> DisplayList
{
get { return _displayList == null ? new List<LabelDisplayInfo>(): _displayList; }
set { _displayList = value; }
}
shsoft888 2008-11-02
  • 打赏
  • 举报
回复
我不是很明白反射,这个问题出在反射上,有没有对这方面有了解的。
睡神在睡觉 2008-11-01
  • 打赏
  • 举报
回复
帮顶,关注!
leafold 2008-11-01
  • 打赏
  • 举报
回复
new List <LabelDisplayInfo>不行。
DefaultValue应该是个constant。
看来有难度
leafold 2008-11-01
  • 打赏
  • 举报
回复
用new List <LabelDisplayInfo>行不?
shsoft888 2008-11-01
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 leafold 的回复:]
DefaultValue的类型错了吧。应该是个List <LabelDisplayInfo>或null,你这儿给的是个type类型
[/Quote]
直接List<LabelDisplayInfo>不行,我试了。编译都有问题。
leafold 2008-11-01
  • 打赏
  • 举报
回复
DefaultValue的类型错了吧。应该是个List <LabelDisplayInfo>或null,你这儿给的是个type类型
shsoft888 2008-11-01
  • 打赏
  • 举报
回复
上面错误了一个地方,更正下:
public partial class SH_DictOld : UserControl
{
public SH_DictOld()
{
_displayList = new List<LabelDisplayInfo>();
}

private List <LabelDisplayInfo> _displayList;
[Category("自定义"), DefaultValue(typeof(List <LabelDisplayInfo>)), Description("xxx")]
public List <LabelDisplayInfo> DisplayList
{
get { return _displayList; }
set { _displayList = value; }
}
}
shsoft888 2008-11-01
  • 打赏
  • 举报
回复
代码发上来太长了,我简单写一下大框吧。
我在自定义控件中这样定义的。

public partial class SH_DictOld : UserControl
{
public SH_DictOld()
{
private List<LabelDisplayInfo> _displayList;
[Category("自定义"), DefaultValue(typeof(List<LabelDisplayInfo>)), Description("xxx")]
public List<LabelDisplayInfo> DisplayList
{
get { return _displayList; }
set { _displayList = value; }
}
}
}

[Serializable]
public struct LabelDisplayInfo
{
private string _filterName;
public string FilterName
{
get { return _filterName; }
set { _filterName = value; }
}

private string _leftChar;
public string LeftChar
{
get { return _leftChar; }
set { _leftChar = value; }
}
}

大概就这样了,以上是在一个DLL文件中。
又建立了一个WinForm项目,把SH_DictOld控件拖到窗体上。
用属性设计器设计SH_DictOld控件的属性,当时可以设计。
可编译完成后,在打开Form窗体设计器就会有一警告:
类型“System.Collections.Generic.List`1[ControlBasic.Main.LabelDisplayInfo]”的对象无法转换为类型“System.Collections.Generic.List`1[ControlBasic.Main.LabelDisplayInfo]”。

隐藏
在 System.ComponentModel.ReflectPropertyDescriptor.SetValue(Object component, Object value)
在 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializePropertyAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement, CodePropertyReferenceExpression propertyReferenceEx, Boolean reportError)
在 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeAssignStatement(IDesignerSerializationManager manager, CodeAssignStatement statement)
在 System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)
mjjzg 2008-10-31
  • 打赏
  • 举报
回复
支持一下,瞧一下你的代码啊
jc8futao 2008-10-31
  • 打赏
  • 举报
回复
能把详细代码和详细的报错发下吗??
zjs1109 2008-10-31
  • 打赏
  • 举报
回复
mark
shsoft888 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 warrior 的回复:]
DefaultValue设置成了一个Type类型了.构造函数中初始化了,这儿就不用设定了吧.
[/Quote]
这不用设定不行的,C#属性设计不知道这是什么类型的。
所以要加上,才可以用属性设计器修改增加List<>列表。
warrior 2008-10-31
  • 打赏
  • 举报
回复
DefaultValue设置成了一个Type类型了.构造函数中初始化了,这儿就不用设定了吧.
yaazz 2008-10-31
  • 打赏
  • 举报
回复
赋值语句两边必须使用物理上同一个类
shsoft888 2008-10-31
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 shsoft888 的回复:]
请帮帮我,谢谢。。
[/Quote]
oooo
加载更多回复(2)

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧