在winforms中可以将控件转换为组件或组件到控件吗?还可以使winforms中的按钮透明吗?
发布于 2010-01-06 17:27:48
Component和Control之间有很大的区别。Component是一个非常简单的类,它有3个成员用于设计时支持,6个成员用于运行时支持,仅此而已。您可以将其中一个拖放到表单上,以便可以编辑其属性。它在运行时所做的任何有用的事情都必须由组件本身实现,没有来自Windows窗体的帮助。
控件通过添加允许组件具有定义良好的运行时行为的成员来扩展组件,尤其是通过包装本机Windows窗口。您可以查看它并单击它。这是一项艰巨的任务,需要数百名成员,尽管他们中的大多数在设计器中是不可见的。
将控件转换为组件,但仍然保留控件特性是可能的。ToolStripItem可以做到这一点。然而,它需要大量的代码,因为您必须替换Windows窗口提供的每个功能。这很难,即使对微软来说,ToolStripItem类也有很多bugz。这样做的唯一好处是可以避免分配窗口句柄。这有时是引人注目的,窗口是昂贵的对象,会使你的代码运行缓慢。并且你被困在窗口的工作方式上,例如,糟糕的透明度支持。
支持一个组件的透明度不是问题,它仅仅是多层油漆叠加在一起。然而,你必须提供控件所能做的一切。
说到点子上,这已经完成了。这就是WPF的确切模型。WPF应用程序(通常)只有一个本机窗口句柄。其他所有内容都是由WPF呈现引擎在其中绘制的。因此,它在支持透明效果方面没有问题。任何其他花哨的东西,比如旋转的控件,你不能让一个本机窗口去做。或者浏览器。
如果你想坚持使用WF,请详细解释你需要什么样的透明效果。有很多方法可以做到这一点,这取决于你想要做什么。顺便说一句,在StackOverflow上,一个好的问题和一个好的答案一样长。
发布于 2010-01-06 16:48:29
您可以在实现IContainer接口的任何对象中承载组件。
https://stackoverflow.com/questions/2011518
复制相似问题