Я создаю пользовательский набор инструментов в виде окон (например, тот, который вы выбираете элементами управления в VS Form Designer). Для того, чтобы получить изображение, которое появляется на стороне текста управления я использую это:Преобразование неизвестного класса в его базовый класс
ToolboxItem tbi = item as ToolboxItem;
var image = tbi.Bitmap;
Где элемент может быть любой тип контроля. Он работает так, как должно быть.
Проблема возникает, когда я пытаюсь использовать пользовательские элементы управления в панели инструментов. Скажем, я создаю этот класс:
public class PMLButton : Button
{
}
Затем, когда PMLButton передается переменной «пункт» это получить значок шестеренки, из таможенного контроля, как это должно быть. Но в этом случае я хотел бы показать значок кнопки по умолчанию для этого элемента.
Все инструменты, которые я буду использовать в панели инструментов, получены из стандартного класса управления Windows (Button, Label, Checkbox и т. Д.).
Если я применил переменную 'item' к ее базовому типу, она будет работать правильно и отобразить правильное изображение. Есть ли способ сделать это?
Я не уверен, что получаю то, что вы хотите, но, вероятно, вы можете использовать Convert.ChangeType (https://msdn.microsoft.com/de-de/library/system.convert.changetype%28v=vs. 110% 29.aspx), но вы получите только возвращаемый объект, поэтому я не знаю, поможет ли эта помощь. Else Я думаю, лучшим решением было бы сделать простой 'if (item is Button) x = (item as Button)' check – Staeff
@Staeff ChangeType не будет работать, потому что я должен указать тип, который я хочу преобразовать, что зависит на объект. Это всегда его базовый тип, но это могут быть кнопки, ярлыки, CheckBox и т. Д. Если это был мой первый вариант, но мне пришлось бы добавить if для каждого типа элемента управления. Это работает, но я думал, что это не изящное решение. – RBasniak
Чтобы быть справедливым, существует только ограниченное количество стандартных элементов управления winforms. Наверное, вы также можете всегда использовать динамический тип. – Staeff