FixingEmbeddedResourcesforGenericUserControl在重构过程中,我在MyControl中添加了一个泛型类型参数,它是一个派生自UserControl的类。所以我的班级现在是MyControl。现在我在运行时收到一条错误消息,指出无法找到嵌入式资源文件MyControl`1.resources。使用.NETReflector快速查看资源文件实际上命名为MyControl.resources,没有`1.在MyControl.InitializeComponent方法的开头,有一行可能是导致问题的原因:System.ComponentModel.ComponentResourceManagerresources=newSystem.ComponentModel.ComponentResourceManager(typeof(MyControl));如何强制ComponentResourceManager使用嵌入的资源文件MyControl.resources?也欢迎使用其他解决此问题的方法。除了Wim的技术之外,您还可以声明一个与通用类同名的非通用基控件,并让您的通用控件/窗体派生自该非通用基类。通过这种方式,您可以欺骗设计器和编译器使用公共类中的资源文件,并且一旦设置了基类,您就可以获得永久的设计器支持,而不必在每次重建时都使用.designer文件://Emptystub类,必须在不同的文件中(作为新类添加,而不是UserControl//或表单模板)publicclassMyControl:UserControl{}//GenericclasspublicclassMyControl:MyControl{//...}唯一的要求是给你的泛型类和它的基类起一个完全相同的名字,而且基类必须在另一个类文件中,否则设计者会抱怨找不到两个类中的一个。附言。我用一个表单对此进行了测试,但它应该与控件一起工作。事实证明,您可以覆盖资源文件名以通过inheritanceComponentResourceManager加载,如下所示:使用System.ComponentModel;内部类CustomComponentResourceManager:ComponentResourceManager{publicCustomComponentResourceManager(Typetype,stringresourceName):base(type){this.BaseNameField=resourceName;现在我可以确保资源管理器像这样加载MyControl.resources:System.ComponentModel.ComponentResourceManagerresources=newCustomComponentResourceManager(typeof(MyControl),"MyControl");这似乎有效。编辑:如果您使用设计器,上面的行将被覆盖,因为它在生成的代码区域中。我避开设计器并使用版本控制工具来恢复任何不需要的更改,但解决方案并不理想。在我的VisualStudio2008上,出现以下错误:System.ComponentModel.ComponentResourceManagerresources=newSystem.ComponentModel.ComponentResourceManager(typeof(MyControl));使用泛型类型“WindowsFormsApplication1.UserControl1”需要类型参数“1”。请注意,在我的例子中,代码是在类名后没有括号生成的。它变得有趣,请参阅ImageList在通用用户控件中自动生成非编译代码。他们说了什么:由Microsoft于2005年7月6日下午2:49发布这是一个有趣的错误。您遇到了我们在Windows窗体设计器中不支持的通用场景。我们将无法在Whidbey(我的笔记:VisualStudio2008?)版本中添加对此的支持。我们会在未来的版本中考虑它。作为解决方法,您可以使用设计器创建一个具有公共Type属性的非泛型UserControl,然后创建一个从它继承的泛型类,并将T传递给基类Type属性。我想这个控件也不能在VisualStudio窗体设计器中设计。最简单最简单的解决方案是为自动生成的typeof()创建一个虚拟类。您不需要继承它,甚至不需要将它暴露给外界://非通用名称,以便自动生成的资源加载代码是快乐的internalsealedclassGridEditorForm{}(以我的经验,获得设计器需要什么解决泛型问题理想的冷却模仿所能提供的时间是不值得的。我不会再使用泛型Windows窗体或控件了。)以上就是C#学习教程:修复通用UserControl的嵌入资源分享的全部内容。侵权请点击右侧联系管理员删除。如需转载请注明出处:
