Это довольно болезненное ограничение в классе ResourceManager. Его метод GetObject () не предоставляет способ передать дополнительные аргументы, которые позволили бы выбрать возвращаемый значок по размеру. Обходной путь - вместо этого добавить значок в проект. Используйте Project + Add Existing Item, выберите ваш .ico файл. Выберите добавленный значок и измените свойство Build Action на «Встроенный ресурс».
Теперь вы можете получить нужный значок с кодом, подобным следующему:
public static Icon GetIconFromEmbeddedResource(string name, Size size) {
var asm = System.Reflection.Assembly.GetExecutingAssembly();
var rnames = asm.GetManifestResourceNames();
var tofind = "." + name + ".ICO";
foreach (string rname in rnames) {
if (rname.EndsWith(tofind, StringComparison.CurrentCultureIgnoreCase)) {
using (var stream = asm.GetManifestResourceStream(rname)) {
return new Icon(stream, size);
}
}
}
throw new ArgumentException("Icon not found");
}
Пример использования:
var icon1 = GetIconFromEmbeddedResource("ARW04LT", new Size(16, 16));
var icon2 = GetIconFromEmbeddedResource("ARW04LT", new Size(32, 32));
Остерегайтесь одного возможного режима отказа: этот код предполагает, что значок был добавлен в ту же сборку, которая содержит метод.