c# - 是否可以将控件转换为组件或组件以在 winforms 中进行控制?

标签 c# .net winforms

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

最佳答案

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

Control 通过添加成员来扩展 Component,这些成员允许它也具有明确定义的运行时行为,最显着的是通过包装 native Windows 窗口。您可以看到它并单击它。一项艰巨的任务,需要数百名成员,尽管他们中的大多数在设计器中是不可见的。

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

支持组件的透明度不是问题,它只是相互叠加的多层绘画。但是,您必须提供控件所做的一切。

言归正传,这个已经做好了。它是 WPF 的确切模型。一个 WPF 应用程序(通常)只有一个 native 窗口句柄。其他所有内容都由 WPF 渲染引擎在其中绘制。因此它可以毫无问题地支持透明效果。许多其他花里胡哨的功能,例如旋转控件,您无法使用 native 窗口来完成。或者浏览器。

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

关于c# - 是否可以将控件转换为组件或组件以在 winforms 中进行控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2011518/

相关文章:

c# - windows phone中如何在页面之间传递多个数据

c# - 如何统一禁用物理系统

c# - 将字符串作为数组访问,检查索引的值并可能更改该索引中的字符

.net - Listview 列标题不显示 VB.Net

c# - 在 Winform 中打开 Crystal 报表

c# - 应用程序如何跨用户帐户进行通信?

c# - 为什么输出是5?

c# - 如何在 C# 中使用 Azure 通信服务 SMS 发送多个收件人 SMS

asp.net - 将 ASP.NET 3.5 更新为 4.0 -> Sys.WebForms.PageRequestManager 未定义

.net - 使用 TFS 2010 运行异步任务单元测试