泛型窗体继承时不能在设计器中显示,为神马?
来源:互联网 发布:翅片式换热器设计软件 编辑:程序博客网 时间:2024/05/21 08:58
今天遇到一奇怪的问题,自己搞了2个小时没有弄好。到Stack Overflow发了个帖子提问,顺便把问题也贴到博客里,如有人看到请帮忙。如果问题解决了,我会把问题的原因和解决方案放到这里来。
I meet a problem today. As following.
I create a generic Form ,
public class Form1<T>:Form
Then I create another inheritance form,
public class From2:Form1<string>.
The form2 cannot be shown in the VS designer, the error message is "all the classes in the file cannot be designed", (this error message is translated from Chinese, the Chinese message is 文件中的类都不能进行设计).
But this program can be compiled successfully, and when it runs, both Form1 and From2 can work.
Anyone can give me some help about this ? Thanks.
I am not a native English speaker, I hope I have described my question clear.
----------------------------------------------
Stack Overflow果然是个好的编程网站,人气旺,水平高。5分钟后已经找到答案了。
以下为答案(原文地址http://adamhouldsworth.blogspot.com/2010/02/winforms-visual-inheritance-limitations.html)
I have a small personal project going that involves a WinForms GUI. I have a series of data listing and editing user controls that I decided to refactor. There were 5 of each, and out of each they used roughly 80%-90% of the same code, just with naming changes.
A fantastic case of "same whitespace, different values". I read this a long time ago, but for some reason it stuck.
Supporting Generics
My first port of call was a base class for each of the two user controls. However, I wanted to migrate even logic involving the business class to the base class, which involved knowing about the business class type.
Step in: Generics.
Step in: first problem.
Using generics causes the designer interface in Visual Studio to crash, as it breaks one of the rules about knowing the base class type. Microsoft explicitly say generics are not supported. Fair enough.
The workaround for this (as specified in the previous link) is to create a concrete implementation of the generic base class using a dummy intermediary:
- BaseControl<T> : UserControl
- CustomerControl_Design : BaseControl<Customer>
- CustomerControl : CustomerControl_Design
The CustomerControl_Design class will not have any designer support, and you shouldn't actually need it. But, your CustomerControl class now does - the peasents rejoice.
I've wrapped the code in compiler tags, so that when it doesn't need design-time support, superfluous code is cut:
#if
DEBUG
namespace
MyNamespace
{
using
System;
public
partial
class
CustomerEditorControl_Design
: BaseEditorControl<Customer>
{
public
CustomerEditorControl_Design() : base
()
{
InitializeComponent();
}
}
}
#endif
public
partial
class
CustomerEditorControl
#if
DEBUG : CustomerEditorControl_Design
#else
: BaseEditorControl<Customer>
#endif
{ ... }
- 泛型窗体继承时不能在设计器中显示,为神马?
- vs C# 继承窗体类出现“文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类”无法打开设计器的错误
- 为什么在一个线程中不能调用显示另一个窗体?
- C#Windows 窗体设计-实现欢迎界面-显示About窗体-在托盘中写入应用程序图标
- 在容器中显示窗体
- 在VS窗体设计器中使用泛型的控件.
- 角色权限中窗体的继承问题即窗体设计器打开异常现象
- 在PowerBuilder中更改窗体继承
- 急救:在visual studio.net 中使用asp.net应用程序制作网页时,从web窗体中拉出的控件不能在浏览时显示?
- 非顶级窗体不能显示为模式对话框错误原因
- 在winform中,MDI窗体不能打开重复窗体
- 为神马android NFC不能模拟RFID Tag
- VB弹出窗体提醒"模式窗体显示时不能显示非模式窗体"
- 在窗体中显示dwg格式缩略图
- 在Panel中显示一个窗体
- 在Windows窗体中显示OpenCV图像
- 使用treeView在主窗体中显示子窗体
- 子窗体在父窗体指定的控件中显示
- OpenGL函数库详细解说
- 对C#中正则表达式的一些解读和总结
- perror
- 队列
- c#中正则表达式大全
- 泛型窗体继承时不能在设计器中显示,为神马?
- Oracle客户端的使用
- awk应用技巧
- Gtalk基本功能完成
- 快速排序算法
- 动态代理方式实现AOP
- C++标准库和STL的关系 (转载)
- android 开机自启动程序1
- WebView输入框实现机制带来的bug