是否可以将控制转换为组件或组件以控制winforms?并且可以使winforms中的按钮透明化吗?
答案 0 :(得分:7)
组件和控件之间存在巨大的差异。 Component是一个非常简单的类,它有3个成员用于设计时支持,6个成员用于运行时支持,就是这样。您可以在表单上删除一个,以便可以编辑其属性。它在运行时所做的任何有用的东西都必须由组件本身实现,Windows Forms没有任何帮助。
Control通过添加成员来扩展Component,这些成员允许它具有良好定义的运行时行为,最明显的是通过包装本机Windows窗口。您可以看到它并单击它。大工作,需要数百名成员,尽管大多数成员在设计师中都不可见。
将控制转换为组件但仍保留控制特性。 ToolStripItem就是这样做的。但是,它需要大量代码,因为您必须替换Windows窗口提供的每个功能。这很难,即使对于微软来说,ToolStripItem类也有很多bugz。您从中获得的唯一好处是可以避免分配窗口句柄。有时引人注目,windows是昂贵的对象,可能会使代码运行缓慢。而且你仍然坚持窗户的工作方式,例如支持透明度差。
支持组件的透明度不是问题,它只是彼此叠加的多层涂料。但是,你必须提供Control所做的一切。
说实话,这已经完成了。它是WPF的确切模型。 WPF应用程序(通常)只有一个本机窗口句柄。其他所有内容都由WPF渲染引擎绘制在其中。因此,它可以毫无困难地支持透明效果。任何许多其他的花里胡哨,如旋转控制,你不能得到一个原生的窗口。或浏览器。
如果您想坚持使用WF,请详细说明您需要什么样的透明效果。有很多方法可以获得一个,这取决于你想要做什么。 Fwiw,StackOverflow的一个好问题就是一个好的答案。
答案 1 :(得分:0)
您可以在任何实现IContainer接口的对象中托管Component。