- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有这些类(class):
class Foo<T1, T2> : Form
where T1, T2 : EventArgs
class MiddleGoo : Foo<X,Y>
class Goo : MiddleGoo
X,Y 只是从 EventArgs 派生的简单类。
我在设计器中看到 Goo,但我想像这样在 Foo 和 Goo 之间创建一个 Boo 类:
class Boo<T1, Y> : Foo<T1, Y>
where T1 : EventArgs
class MiddleGoo : Boo<X,Y>
class Goo : MiddleGoo
中间类的解决方法不起作用,有什么想法吗?
编辑:我的意思是 Y 和 X 是像 YEventArgs 和 XEventArgs 这样的类,我的问题是当我将 Y 定义为 T2 但仍然希望在 T1 中保持通用时,在设计器类 Boo 中看到。
EDIT2:我刚刚意识到我拼错了一些关于 Y 类的东西......
public class Foo<T1, T2> : Form
where T1 : EventArgs
where T2 : EventArgs
{
}
public class Boo<T1> : Foo<T1, MyEventArgs2>
where T1 : EventArgs
{
}
public class MiddleGoo : Boo<MyEventArgs1>
{
}
class Goo : MiddleGoo
{
}
public class MyEventArgs2 : EventArgs
{
}
public class MyEventArgs1 : EventArgs
{
}
需要说明的是,我只是在 Designer 中看不到 Boo...(我也看不到 MiddleGoo,但我不需要)
最佳答案
适用于 Visual Studio 版本 >= VS2015.1
从 VS2015.1 开始,Windows 窗体设计器可以毫无问题地显示具有通用基类的类。因此,较新版本的 VS 不再需要其他帖子中的解决方法,并且以下类将毫无问题地显示在设计器中。
所以有一个像这样的基本泛型类:
public class BaseForm<TModel,TService> : Form
{
public TModel Model {get;set;}
public TService Service {get; set;}
}
您可以在设计器中毫无问题地创建派生表单:
public class FooForm: BaseForm<Foo,FooService>
{
}
旧版本的 Visual Studio
在旧版本的 Visual Studio 中,当设计器想要在设计器中托管您的表单时,它会尝试创建您的表单基类的实例,并且您的类必须具有非泛型基,以便设计器可以显示它。
所以你可以看到BaseForm<T>:Form
可以在设计器中显示,但 CategoryForm:BaseForm<Category>
无法在设计器中显示。作为这些情况下的解决方法,您应该创建一个 BaseCategoryForm:BaseForm<Category>
然后 CategoryForm:BaseCategoryForm
将显示在设计器中。
示例
假设这是接受 TModel 作为模型和 TService 作为服务的基类:
public class BaseForm<TModel,TService> : Form
{
public TModel Model {get;set;}
public TService Service {get; set;}
}
然后用这行代码以这种方式创建一个中间表单:
Public Class BaseFooForm: BaseForm<Foo, FooService>{ }
最终的形式是这样的:
public class FooForm: BaseFooForm
{
}
现在是决赛FooForm
有设计师,你可以正常使用它。通过这种方式,您可以创建要在设计器中得到支持的类。
注意
此更新也适用于控件设计器。所以也在generic base class for WinForm UserControl对于 VS>= VS2015.1
,您不再需要这样的解决方法.
关于c# - Windows 窗体泛型继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33112724/
对于一个科学实验,我写了一个turtle.py ,它会打开一个 800x480 的窗口并绘制一个缓慢增长的黑点。 turtle.py以 C:\Users\kaza>python C:\Users\ka
我开发了一个 swing 应用程序,但每次运行应用程序时都会打开一个新窗口。我希望如果一个窗口已经打开,则其他窗口不允许打开。 最佳答案 Here是一个 Java 单一应用实例的例子: A singl
有没有办法检测主进程中 Electron 的结构? process.platform 似乎也在 x64 机器上返回 win32,我没有在文档中找到任何获取架构的选项。 最佳答案 你试过 process
public short[] HanningWindow(short[] signal_in ,int pos ,int size) { for (int i= pos; i < pos+si
我有一个具有这些属性的 Electron 窗口: mainWindow = new BrowserWindow({ width: 800, height: 600, title: "Aqu
我有一个 Ubuntu 工作站,我正在尝试引导一个 Windows 节点。 Windows 节点在端口 2222 上打开了 ssh。我一直在关注 http://docs.opscode.com/plu
我是一名优秀的程序员,十分优秀!