【发布时间】:2015-05-13 07:32:31
【问题描述】:
我正在 Windows 窗体中创建一个自定义工具箱(就像您在 VS 窗体设计器中选择的控件一样)。要获取出现在控件文本一侧的图像,我正在使用这个:
ToolboxItem tbi = item as ToolboxItem;
var image = tbi.Bitmap;
其中 item 可以是任何类型的 Control。它正在正常工作。
当我尝试在工具箱中使用自定义控件时会出现问题。假设我创建了这个类:
public class PMLButton : Button
{
}
然后,当 PMLButton 被传递到“item”变量时,它会得到一个自定义控件的齿轮图标,就像它应该的那样。但在这种情况下,我想显示该项目的默认按钮图标。
我将在工具箱中使用的所有工具都派生自默认的 Windows 控件类(按钮、标签、复选框等)。
如果我将“item”变量转换为其基本类型,它将正常工作并显示正确的图像。有没有办法做到这一点?
【问题讨论】:
-
我不确定我是否得到你想要的,但可能你可以使用 Convert.ChangeType (msdn.microsoft.com/de-de/library/…) 但你只会得到一个返回的对象,所以我不知道这是否有很大帮助。否则我想最好的解决方案是做简单的
if (item is Button) x = (item as Button)检查 -
@Staeff ChangeType 不起作用,因为我必须指定要转换的类型,这取决于对象。它始终是它的基本类型,但它可以是按钮、标签、复选框等。if 是我的第一个选项,但我必须为每种类型的控件添加一个 if。它有效,但我认为这不是一个优雅的解决方案。
-
公平地说,标准 winforms 控件的数量有限。我想你也可以选择动态类型。
标签: c# winforms custom-controls