gpt4 book ai didi

winforms - Visual Studio WinForms 是否支持无窗口控件?

转载 作者:行者123 更新时间:2023-12-04 21:49:11 26 4
gpt4 key购买 nike

Visual Studio WinForms 工具箱中的每个控件都必须来自 Control ?

Visual Studio 是否支持无窗口控件?

您添加到 Visual Studio 工具箱中的每个控件:

enter image description here

must1 来自 Control ,它是 的包装器开窗控制。

不幸的是,窗口控件非常“笨重”;有很多,尤其是嵌套,会导致 WinForms 的性能受到影响。

过去,我通过创建聚合自定义控件来解决这个问题。自定义控件内部包含其他无窗口控件:

  • 图像(PictureBox 的无窗口版本)
  • 标题标签(Label 的无窗口版本)
  • 字幕标签(Label 的无窗口版本)
  • 边框(Panel 的无窗口版本)

  • 这些对于缓解 WinForms 中的性能问题很有用,但它们被困在代码中。

    我想做其他开发环境允许的,是 Control的一个版本这不会创建 Windows 窗口。我希望 Visual Studio 工具箱能够接受 **window-less* 控件。

    我知道如果我 真的想要无窗口控件:我应该切换到 WPF。但这太过分了。

    Visual Studio WinForms 是否支持无窗口控件?

    1 与否

    最佳答案

    是和否。

    首先,请查看尊敬的陈雷蒙 (Raymond Chen) 的这篇文章:http://blogs.msdn.com/b/oldnewthing/archive/2005/02/11/371042.aspx

    是的。 欢迎您创建并非源自 Control 的“控件”。 .我在我的应用程序中创建了几个原生支持点击、分层等的无窗口控件,我将它们绘制到屏幕外缓冲区,然后直接在某个父级 Form 上绘制它们。或 Control (例如 PictureBox )。这很简单,但并不简单,因为您需要自己在代码中管理所有内容。

    对于任何 Control,Windows 窗体设计器将不支持任何无窗口控件。 - 派生控件设计器(例如将它们放置在面板或表单上),因此您将无需拖放表单设计。

    正如汉斯所指出的,ToolStripMenuStrip (无窗口控件)就是这样的例子。请注意,当您创建新的 MenuStrip 时在 Form , MenuStrip放置在表单下方的组件托盘中。 MenuStrip有一组与之关联的自定义设计器类,以支持自定义绘画和“在此处键入”功能,以及用于添加和删除菜单项的对话框。请注意“子”无窗口控件,例如 ToolStripButton , 在 ToolBox 中不可用以直接将拖放支持拖放到表单上 - 只有自定义设计人员知道它。 MenuStrip 的定制设计师还支持选择子无窗口控件,以便您可以在“属性”窗口中编辑每个项目的属性。

    我无法想象这适合您的情况 (除非您正在创建一些用于转售的控件),但是如果您非常有决心,您可以为您的一组无窗口控件以几乎相同的方式创 build 计器支持:

  • 创建一个派生自 Component 的类这将用于管理您的无窗口控件。例如,您可以调用此类 WindowlessWidgetManager .编译后,此控件将位于您的工具箱中。 WindowlessWidgetManager 可以包含您的无窗口控件的集合,并为 Canvas (例如 Form)提供绘画和其他 UI 支持。或 PictureBox .
  • 创建一个派生自 ComponentDesigner 的设计器类支持在设计时添加和删除自定义控件等内容。如需更多信息,请参阅 http://msdn.microsoft.com/en-us/library/system.componentmodel.design.componentdesigner(v=VS.90).aspx

  • 这是一个非常漫长的过程,有许多注意事项,但如果这是您希望实现的目标,那么功能就在那里。

    关于winforms - Visual Studio WinForms 是否支持无窗口控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8217334/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com