【发布时间】:2011-01-01 23:05:50
【问题描述】:
winforms中是否可以将控件转换为Component或组件来控制?并且可以使winforms中的按钮透明吗?
【问题讨论】:
winforms中是否可以将控件转换为Component或组件来控制?并且可以使winforms中的按钮透明吗?
【问题讨论】:
组件和控件之间存在巨大的区别。 Component 是一个非常简单的类,它有 3 个成员用于设计时支持,6 个成员用于运行时支持,仅此而已。您可以将一个放在表单上,以便可以编辑其属性。它在运行时所做的任何有用的事情都必须由组件本身实现,Windows 窗体没有帮助。
Control 通过添加允许它具有良好定义的运行时行为的成员来扩展 Component,尤其是通过包装原生 Windows 窗口。您可以看到它并单击它。一项艰巨的工作,需要数百名成员,尽管他们中的大多数人在设计师中是不可见的。
将控件转换为组件但仍保留控件特征是可能的。 ToolStripItem 就是这样做的。但是,它需要大量代码,因为您必须替换 Windows 窗口提供的所有功能。这很难,即使对于 Microsoft,ToolStripItem 类也有很多错误。您从中获得的唯一好处是您可以避免分配窗口句柄。有时可能会引人注目,窗口是昂贵的对象,并且会使您的代码运行缓慢。而且您会被窗口的工作方式所困扰,例如对透明度的支持不佳。
使用组件支持透明度不是问题,它只是相互叠加的多层油漆。但是,您必须提供 Control 所做的所有其他事情。
言归正传,这已经完成了。它是 WPF 的确切模型。 WPF 应用程序(通常)只有一个本机窗口句柄。 WPF 渲染引擎在其中绘制其他所有内容。因此,它支持透明效果没有问题。任何其他的花里胡哨,比如旋转控件,你不能让一个本地窗口来做。或者浏览器。
如果你想坚持WF,详细说明你需要什么样的透明效果。有很多方法可以得到一个,这取决于你想要做什么。 Fwiw,StackOverflow 上的一个好问题与一个好的答案差不多。
【讨论】:
您可以在任何实现 IContainer 接口的对象中托管组件。
【讨论】: