During a refactoring, I added a generic type parameter to MyControl
, a class derived from UserControl. So my class is now MyControl<T>
.
Now I get an error at runtime stating that the embedded resource file MyControl`1.resources cannot be found. A quick look with .NET Reflector shows that the resource file is actually called MyControl.resources, without the `1.
At the start of the MyControl<T>.InitializeComponent
method there is this line which is probably the one causing problems:
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager( typeof(MyControl<>));
How do I force the ComponentResourceManager
to use the embedded resource file MyControl.resources
? Other ways to resolve this issue are also welcome.
Turns out you can override the resource filename to load by inheriting from ComponentResourceManager
like this:
using System; using System.ComponentModel; internal class CustomComponentResourceManager : ComponentResourceManager { public CustomComponentResourceManager(Type type, string resourceName) : base(type) { this.BaseNameField = resourceName; } }
Now I can make sure that the resource manager loads MyControl.resources
like this:
System.ComponentModel.ComponentResourceManager resources = new CustomComponentResourceManager(typeof(MyControl<>), "MyControl");
This seems to work.
edit: the above line is overwritten if you use the designer, because it is in the generated code region. I avoid the designer and make use of version control tools to revert any unwanted changes, but the solution is not ideal.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With