我正在Windows窗体中创建一个自定义工具箱(就像你在VS窗体设计器中选择控件一样)。为了获得控件文本侧面出现的图像,我正在使用它:
ToolboxItem tbi = item as ToolboxItem;
var image = tbi.Bitmap;
其中item可以是任何类型的Control。它的工作原理应该如此。
当我尝试在工具箱中使用自定义控件时,会出现问题。假设我创建了这个类:
public class PMLButton : Button
{
}
然后,当'item'变量传递PMLButton时,它会获得自定义控件的齿轮图标。但在这种情况下,我想显示此项目的默认按钮图标。
我将在工具箱中使用的所有工具都是从默认的Windows控件类(Button,Label,Checkbox等)派生的。
如果我将'item'变量转换为其基本类型,它将正常工作并显示正确的图像。有没有办法做到这一点?
答案 0 :(得分:2)
ToolBoxItem
使用反射来获取类型,因此投射它不会改变其行为。
最简单的解决方案是自己分配工具箱位图:
[ToolboxBitmap(typeof(Button))]
public class PMLButton : Button
{
}
或者,如果包含位图的控件始终是继承树的一步,则可以使用:
var image = new ToolboxItem(item.GetType().BaseType).Bitmap;
我肯定会选择属性解决方案,因为PMLButton
在设计器中也会有一个按钮位图。