将未知数 class 转换为其基数 class
Converting an unknown class to its base class
我正在 windows 表单中创建自定义工具箱(就像您在 VS 表单设计器中选择控件的工具箱)。要获取出现在控件文本一侧的图像,我使用的是:
ToolboxItem tbi = item as ToolboxItem;
var image = tbi.Bitmap;
其中 item 可以是任何类型的控件。一切正常。
当我尝试在工具箱中使用自定义控件时出现问题。假设我创建了这个 class:
public class PMLButton : Button
{
}
然后,当 PMLButton 传递给 'item' 变量时,它会获得自定义控件的齿轮图标,正如它应该的那样。但在这种情况下,我想显示该项目的默认按钮图标。
我将在工具箱中使用的所有工具都派生自默认 windows 控件 class(按钮、标签、复选框等)。
如果我将 'item' 变量转换为它的基本类型,它将正常工作并显示正确的图像。有什么办法吗?
ToolBoxItem
使用反射来获取类型,因此转换它不会改变其行为。
最简单的解决方案是自己分配工具箱位图:
[ToolboxBitmap(typeof(Button))]
public class PMLButton : Button
{
}
或者,如果包含位图的控件始终位于继承树的上一级,您可以使用:
var image = new ToolboxItem(item.GetType().BaseType).Bitmap;
不过我肯定会选择属性解决方案,因为 PMLButton
在设计器中也会有一个按钮位图。
我正在 windows 表单中创建自定义工具箱(就像您在 VS 表单设计器中选择控件的工具箱)。要获取出现在控件文本一侧的图像,我使用的是:
ToolboxItem tbi = item as ToolboxItem;
var image = tbi.Bitmap;
其中 item 可以是任何类型的控件。一切正常。
当我尝试在工具箱中使用自定义控件时出现问题。假设我创建了这个 class:
public class PMLButton : Button
{
}
然后,当 PMLButton 传递给 'item' 变量时,它会获得自定义控件的齿轮图标,正如它应该的那样。但在这种情况下,我想显示该项目的默认按钮图标。
我将在工具箱中使用的所有工具都派生自默认 windows 控件 class(按钮、标签、复选框等)。
如果我将 'item' 变量转换为它的基本类型,它将正常工作并显示正确的图像。有什么办法吗?
ToolBoxItem
使用反射来获取类型,因此转换它不会改变其行为。
最简单的解决方案是自己分配工具箱位图:
[ToolboxBitmap(typeof(Button))]
public class PMLButton : Button
{
}
或者,如果包含位图的控件始终位于继承树的上一级,您可以使用:
var image = new ToolboxItem(item.GetType().BaseType).Bitmap;
不过我肯定会选择属性解决方案,因为 PMLButton
在设计器中也会有一个按钮位图。