c#windows窗体 怎么给用户控件传递泛型类

怎么给用户控件传递泛型类其实就是想实现传DataGridView控件名和数据模型实例就可以实现绑定不同DataGridView和不同list<model>实例就可以控制D... 怎么给用户控件传递泛型类
其实就是想实现传DataGridView控件名和数据模型实例就可以实现绑定不同DataGridView和不同list<model>实例就可以控制DataGridView分页的自定义控件
展开
 我来答
makosharp
2014-03-25 · TA获得超过676个赞
知道小有建树答主
回答量:188
采纳率:100%
帮助的人:267万
展开全部
真是越说越远了,汗一个。

看到你的用户控件代码中的partial了么,
public partial class pageChangeByLinklabel<T>:UserControl

partial说明此类还有一半在另外的cs文件中,正是系统替你写好的pageChangeByLinklable.designer.cs

去那边把类签名也改成泛型版就好了。找不到InitializeComponent方法是因为此方法由系统自己成成,丢在那边了。

此外,给用户控件(或者说一个类)传类型参数真的是有很多种方法。
一、在类说明上直接用泛型声明
二、在类的构造中加入参数(Type t),准确的说不是泛型但是用法类似。
三、在类中加一个设置参数的方法,此方法可以写成泛型版。
四、在类中加一个设置参数的方法,传入参数Type t。
五、向类中传T类型的实例instance,类中自己保存typeof(instance)。
等等……
更多追问追答
追问
请问大神
按照你上面那个方法,没有错了,不过由于在类名后面加了,不能生自定义控件的dll包,
--四、在类中加一个设置参数的方法,传入参数Type t。Type参数自能够匹配字段类型,不能匹配内类型,
怎么弄一个属性,用来获得类型还是不知道
追答
  1. 实际上如果你一定要在UserControl中改签名的话,只要你在设计器使用了任何资源(如图片等),一定会报错的,因为设计器根本不能识别泛型扩展的用户控件。

  2. “Type参数自能够匹配字段类型,不能匹配内类型”我不知道你“内类型”具体指什么。仅一般用途来说,在用户控件中维护一个private Type myType;随便怎么传都可以。

    public void SetType(Type myType){this.myType=myType;}足够了。有了myType,虽然没有泛型T这样用起来方便,但是完全可以做一样的工作,比如返回一个myType类型的值之类。


此外想请你说明一下为什么一定要在用户控件类上用泛型?很多需求都可以有实现捷径的。

1044617901
2020-01-19 · TA获得超过442个赞
知道答主
回答量:90
采纳率:0%
帮助的人:49.4万
展开全部
兄弟,最后怎么解决的?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhang399401
2014-03-24 · TA获得超过702个赞
知道小有建树答主
回答量:1347
采纳率:0%
帮助的人:929万
展开全部
重载构造函数
更多追问追答
追问
主要是在类名后后构造函数InitializeComponent();不能执行,不能初始化组件
追答
T是类型 你知定下类型就行了
public Form1(List list)
{
InitializeComponent();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式