后代通用表单无法在表单设计器中显示!

3

我有一个通用的基础表单,但后代表单在设计器中无法工作。这显然是一个众所周知的问题,同样的答案在这里这里给出,仅举两个例子。

这个解决方案似乎对其他人有效,当我实施它时,至少会得到一个不同的错误:

"找不到适合指定区域性或中性区域性的任何资源。请确保"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
}

现在我需要跳过什么障碍?

编辑:天哪,我找到问题了 - 好吧,有点。基本表单设置了Icon属性,这在资源文件中创建了一些内容。当我删除图标并重新编译时,基本表单突然起作用了!

现在回答这个问题的信用归于谁能找到一个解决办法,让我可以保留我的基本表单中的图标!


你的表单目前是否有任何内容或使用本地化? - Adam Houldsworth
这有帮助吗?https://dev59.com/lnI-5IYBdhLWcg3w48xP - Adam Houldsworth
似乎并没有帮助我,哈哈... - Adam Houldsworth
1
似乎由于类的通用类型名称,它无法找到资源名称。我在通用控件下创建了一个基类,其中包括一个带有图片的图片框,我从通用控件中删除了图片框,这样就可以正常工作了 - 所以这是一种可能的,但完全不美观的解决方法。 - Adam Houldsworth
2个回答

3

实际上,我找到了一种更简单的解决方法,不会在您对通用基础表单进行美化更改时被覆盖风险:只需使通用表单继承另一个具体表单BaseForm,在那里设置Icon属性(以及任何其他资源)。

因此:

public partial class MyBaseForm<T> : BaseForm { }

非常有效!


啊,是的,我也在你的主要问题评论中提出了这个建议。无论如何,只要你的解决方案对你有用,那就是最重要的! :-) - Adam Houldsworth
@Adam - 噢!我明显没有仔细阅读你的评论!谢谢 :) - Shaul Behr

2
从我的评论继续,我设法让这个解决方案起作用: 为通用UserControl修复嵌入资源 它看起来是给资源一个不同的名称,以消除通用类型,并将名称与正确的类型关联起来。在你的示例中,我做了以下事情:
System.ComponentModel.ComponentResourceManager resources = new CustomComponentResourceManager(typeof(MyBaseForm<>),"MyBaseForm");
我把它放在通用基础控件的InitializeComponent中(我用一个UserControl进行测试),它修复了具体类的设计器。但是,我仍然需要包含一个中间类的解决方法,以指定通用参数的类型。
这并不能阻止设计器在重新生成时覆盖您的更改,我也不知道如何从设计器代码中删除它。那个链接的原始帖子作者也有这个问题。然而,为了获得好处而快速修复并不是一个坏的折衷方案,只要你能记住这样做!

+1 很好的答案,而且它有效...但请看看我的答案,我认为那是更好的解决方案。 - Shaul Behr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接