将未知类转换为其基类

时间:2015-03-11 13:25:31

标签: c# winforms custom-controls

我正在Windows窗体中创建一个自定义工具箱(就像你在VS窗体设计器中选择控件一样)。为了获得控件文本侧面出现的图像,我正在使用它:

ToolboxItem tbi = item as ToolboxItem;
var image = tbi.Bitmap;

其中item可以是任何类型的Control。它的工作原理应该如此。

当我尝试在工具箱中使用自定义控件时,会出现问题。假设我创建了这个类:

public class PMLButton : Button
{
}

然后,当'item'变量传递PMLButton时,它会获得自定义控件的齿轮图标。但在这种情况下,我想显示此项目的默认按钮图标。

我将在工具箱中使用的所有工具都是从默认的Windows控件类(Button,Label,Checkbox等)派生的。

如果我将'item'变量转换为其基本类型,它将正常工作并显示正确的图像。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

ToolBoxItem使用反射来获取类型,因此投射它不会改变其行为。

最简单的解决方案是自己分配工具箱位图:

[ToolboxBitmap(typeof(Button))]
public class PMLButton : Button
{
}

或者,如果包含位图的控件始终是继承树的一步,则可以使用:

var image = new ToolboxItem(item.GetType().BaseType).Bitmap;

我肯定会选择属性解决方案,因为PMLButton在设计器中也会有一个按钮位图。