我将如何制作另一个应用程序';将子窗口转换为选项卡?(C#)

我将如何制作另一个应用程序';将子窗口转换为选项卡?(C#),c#,mdi,children,hwnd,C#,Mdi,Children,Hwnd,例如,我有一个应用程序,其中有一个主窗口,然后是子窗口。 我需要的是抓取该应用程序的每个子窗口,并将它们显示为我的应用程序中的选项卡,或者显示在面板的手柄上 我已经有了绑架应用程序并将其放入我的应用程序中的代码,它工作得很好。MDI支持已经存在于C#中。因此,第一个屏幕截图是使用MDI选项 第二个屏幕截图是使用选项卡式窗口。现在您有两个选择: 使用这个开源库,它可以让你的应用程序中有标签。类似于VisualStudio界面的东西。您可以创建表单,然后根据需要对其进行制表。您甚至可以通过拖放将它们

例如,我有一个应用程序,其中有一个主窗口,然后是子窗口。 我需要的是抓取该应用程序的每个子窗口,并将它们显示为我的应用程序中的选项卡,或者显示在面板的手柄上


我已经有了绑架应用程序并将其放入我的应用程序中的代码,它工作得很好。

MDI支持已经存在于C#中。因此,第一个屏幕截图是使用MDI选项

第二个屏幕截图是使用选项卡式窗口。现在您有两个选择:

  • 使用这个开源库,它可以让你的应用程序中有标签。类似于VisualStudio界面的东西。您可以创建表单,然后根据需要对其进行制表。您甚至可以通过拖放将它们停靠在父窗体中的任何位置。就像在VisualStudio中一样
  • 第二个选项是创建一个包含整个窗口的选项卡控件的表单。在这里,您可以使用资源编辑器创建选项卡,并根据要向最终用户显示的表单隐藏/显示选项卡

  • 在我看来,使用第一个选项可以提供更多的定制。如果使用dockpanel,还可以在第一个屏幕截图和第二个屏幕截图中显示的视图之间切换。所以用户可以更好地控制他想要查看的内容。Dockpanel甚至可以在商业应用程序中免费使用,并附带源代码。因此,您可以使用dll或直接将代码合并到应用程序中。

    这不是“选项卡”,而是一个MDI应用程序。请澄清:您的应用程序是否为WinForms MDI?谢谢Kavitesh Singh,我今天晚些时候下班回家后会试用DockPanelSuite。如果这清除了任何东西,我将尝试加载一个应用程序(进程p=Process.Start(CEROOT+“sapien.exe”);然后将父窗口设置为我的tabcontrol(或DockPanel),然后将加载的应用程序的子窗口“sapien.exe”设置为它们自己的选项卡(或DockPanel)。感谢大家。@E3pO供参考,将表单实例插入WinForms TabControl的一个选项卡页非常容易:假设您有一个名为“F2”的表单实例,您想进入应用程序表单TabControl的第一个选项卡页:将“表单”F2的TopLevel属性设置为“false,然后您所要做的就是:tabControl1.TabPages[0].Controls.Add(F2)。。。请注意,您可能希望将表单停靠、定位或锚定在其TabPage容器中,以实现所需的“外观”。祝您好运,@E3pO如果您在.NET中处于“入门级”,您可能希望考虑/评估学习编写DockPanelSuite(我相信这是一个很好的库)的“投资”是否“从长远来看”对您最有用,这取决于您作为程序员的目标。当然,我不是“通灵者”:你可能只是想要一个现实世界问题的“快速修复”。我已经用WinForms(而不是MDI)编写了程序,将每个TabControl页面分解成一个单独的形式,并允许您将它们再次“内爆”为一个TabControl:通过这种方式学到了很多。@Kavitesh,我可以在一个不是MDI的WinForms应用程序中复制这两个屏幕截图的外观,在第二个屏幕上使用标准的MenuStrip和TabControl。我已经要求OP澄清。@BillW:我在第2点中提到过,以防他想使用tabcontrol进行这样的查看。我刚才给了他两个选择,他可以选择其中一个。使用dockpanel,您可以像在VisualStudio的解决方案资源管理器或属性中一样拥有侧面板。这是他以后可能需要的东西。如果您使用tabcontrol,那么肯定不需要MDI。他的第一个屏幕显示了MDI类型的应用程序。所以记住这一点,我给出了第一个选择。@Kavitesh,没有人会批评你的回答。苏克里亚,(如果我的直觉是正确的,还有:“Sat Sri Akal”)@BillW:“Sat Sri Akal”-我在这里和你在一起:)有没有印度人或其电影的熟人:??