我有一个通用的基本表单,后代表单在设计器中不起作用。这显然是一个众所周知的问题,同样的答案是here和here,仅举两个地方。
此解决方案似乎适用于其他所有人,当我实现它时,至少我得到一个不同的错误:
“无法找到适合指定文化或中性文化的任何资源。确保在编译时将”MyBaseForm`1.resources“正确嵌入或链接到程序集”MyAssembly“中,或者所需的所有附属程序集都是可加载和完全签名。“
我的课程是:
public partial class MyBaseForm<T> : Form { }
#if DEBUG
public partial class MyIntForm_Design : MyBaseForm<int> {
}
#endif
public partial class MyIntForm
#if DEBUG
: MyIntForm_Design {
#else
: MyBaseForm<int> {
#endif
}
现在我必须跳过这里的箍?
编辑: OMG,我发现了问题 - 好吧,有点儿。基本表单具有Icon
属性集,它在资源文件中创建了一些内容。当我删除图标并重新编译时,基本表单突然起作用了!
现在回答这个问题的归功于任何找到解决方法的人,以便我可以在我的基本形式中保留图标!
答案 0 :(得分:3)
实际上,我找到了一个更简单的解决方法,每当您对通用基本表单进行修饰更改时,都不会被覆盖:只需使通用表单继承自另一个具体形式BaseForm
,其中Icon属性(以及任何其他资源)已经确定。
因此:
public partial class MyBaseForm<T> : BaseForm { }
努力享受!
答案 1 :(得分:2)
继续我的评论,我设法让这个解决方案起作用:
Fix embedded resources for a generic UserControl
它似乎正在做的是为资源提供一个不同的名称,以便删除泛型类型,但将名称与正确的类型相关联。在您的示例中,我执行了以下操作:
System.ComponentModel.ComponentResourceManager 资源= 新的CustomComponentResourceManager(typeof(MyBaseForm&lt;&gt;), “MyBaseForm”);
我将它放在通用基本控件的InitializeComponent
中(我使用UserControl
进行测试)并修复了具体类的设计者。但是,我仍然必须包含中间类的变通方法来指定泛型参数的类型。
这并不能阻止设计师在重新生成时铺设您的更改,而且我知道无法从设计器代码中删除它。该链接的原始海报也有这个问题。然而,只要您记得这样做,快速修复代替好处并不是一个糟糕的权衡!