【问题标题】:Is Possible to convert the controls to Component or component to control in winforms?是否可以将控件转换为组件或组件以在 winforms 中进行控制?
【发布时间】:2011-01-01 23:05:50
【问题描述】:

winforms中是否可以将控件转换为Component或组件来控制?并且可以使winforms中的按钮透明吗?

【问题讨论】:

    标签: c# .net winforms


    【解决方案1】:

    组件和控件之间存在巨大的区别。 Component 是一个非常简单的类,它有 3 个成员用于设计时支持,6 个成员用于运行时支持,仅此而已。您可以将一个放在表单上,​​以便可以编辑其属性。它在运行时所做的任何有用的事情都必须由组件本身实现,Windows 窗体没有帮助。

    Control 通过添加允许它具有良好定义的运行时行为的成员来扩展 Component,尤其是通过包装原生 Windows 窗口。您可以看到它并单击它。一项艰巨的工作,需要数百名成员,尽管他们中的大多数人在设计师中是不可见的。

    将控件转换为组件但仍保留控件特征是可能的。 ToolStripItem 就是这样做的。但是,它需要大量代码,因为您必须替换 Windows 窗口提供的所有功能。这很难,即使对于 Microsoft,ToolStripItem 类也有很多错误。您从中获得的唯一好处是您可以避免分配窗口句柄。有时可能会引人注目,窗口是昂贵的对象,并且会使您的代码运行缓慢。而且您会被窗口的工作方式所困扰,例如对透明度的支持不佳。

    使用组件支持透明度不是问题,它只是相互叠加的多层油漆。但是,您必须提供 Control 所做的所有其他事情。

    言归正传,这已经完成了。它是 WPF 的确切模型。 WPF 应用程序(通常)只有一个本机窗口句柄。 WPF 渲染引擎在其中绘制其他所有内容。因此,它支持透明效果没有问题。任何其他的花里胡哨,比如旋转控件,你不能让一个本地窗口来做。或者浏览器。

    如果你想坚持WF,详细说明你需要什么样的透明效果。有很多方法可以得到一个,这取决于你想要做什么。 Fwiw,StackOverflow 上的一个好问题与一个好的答案差不多。

    【讨论】:

    • @nobugz 先生,我需要这个,因为我创建了一个名为 SetControls(control controlName) 的函数,它只将控制作为参数。我想传递工具提示容器中的工具条按钮。函数 SetControls() 将工具条容器视为控件,但不将工具条按钮视为控件,如果我将工具条按钮作为控件传递,则会出现错误。那我该怎么办?我也单独发布了这个问题。
    • 我已经建议你对你的 SetControls 进行另一个重载,它需要一个 ToolStripItem 参数。
    • @nobugz 先生,还有其他解决方案吗?
    • @nobugz 是 ComponentConverter 会工作吗?或者toolstripitem可以转换为控件吗?
    • 没有。这个问题你到处都是,我认为这是关于透明度的。我想我帮不了你。
    【解决方案2】:

    您可以在任何实现 IContainer 接口的对象中托管组件。

    【讨论】:

    • 对不起,你能详细解释一下吗?
    • 组件通常是公共语言运行时东西的存储空间......它们通常用于跨语言迁移。例如,将变量的值从 C# 应用程序发送到 Java 应用程序(它们在运行时都使用 CLR,因此组件基本上是执行此操作的唯一方法)如果您需要转移控件,这可能会有点困难,因为渲染在转换为 CLR 之前完成一个控件
    • toolstripbutton放置在toolstrip中是component吗?
    • 我不这么认为...这是工具条的子控件
    猜你喜欢
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多