将控件从一个标签页移动到另一个标签页

本文关键字:标签 移动 另一个 一个 控件 | 更新日期: 2023-09-27 18:09:16

我目前正在做一个WinForm项目,其中有几个不同的选项卡。在每个选项卡中都有各种控件,如按钮、子选项卡、文本框等。

我需要整合整个应用程序,其中包括从一个选项卡获取某些控件并将它们移动到另一个选项卡。当我第一次尝试这样做时,我只是复制并粘贴了这些控件。正如你可以想象的那样,由于我没有移动控件的属性,所以这不起作用,我只是在不同的选项卡上创建了新的属性。因此,当我编译代码时,没有任何工作,因为没有分配给新控件的代码。

当我再次尝试时,这次我剪切和粘贴,它也保持了与旧控件相同的属性(特别是代码中的引用名称),因此据我所知,代码应该通过名称识别控件,并应用相同的操作。但是,当我编译代码时,应用程序成功构建,但控件不执行任何操作。

将控件从一个标签页移动到另一个标签页

使用文档大纲。

视图…其他窗口……文档大纲。

选择所需的组件,并将其从树控件中的一个选项卡页面拖到另一个选项卡页面。我这样做了,并且操作保留在新的选项卡页面中。

将项目拖出选项卡控件并拖到表单本身上。切换到另一个选项卡。然后将项目拖到该选项卡中。它本质上是2个拖拽移动,但是因为你从来没有切过,所有的代码链接都被维护。如果您的选项卡控件占用了整个表单,只需在执行上述步骤时将其缩小,然后在完成后再次将其变大。

当您"cut"控件时,您切断了控件与其各自事件之间的连接。当你再次"粘贴"它们时,它们不再与事件相关联,所以它们看起来不会对任何事情。

"event"方法应该仍然存在于您的代码中,但是您必须手动遍历并再次将每个事件订阅到每个控件(通过Properties窗口)。

或者,恢复这些更改,然后打开.Designer.cs文件并查找如下内容:

this.tabPage1.Controls.Add(this.dataGridView1);

例如,把dataGridView1放在tabPage1里面。

如果您想将DataGridView移动到另一个TabPage,您可以将上面代码中的this.tabPage1更改为this.tabPage2

this.tabPage2.Controls.Add(this.dataGridView1);

然后,您可以翻回设计器视图,并将控件移动到TabPage中的任何您想要的位置。

我刚刚测试了它。当你剪切和粘贴你的控件时,你失去了事件的连接。在剪切和粘贴之后,你需要做的是进入control properties-events,找到有问题的事件,并在右侧选择你想要处理该事件的方法。

这将把它们从第一个TabPage上剪切下来并粘贴到第二个TabPage上,我认为你可以经常这样做。只要稍加改动,你就可以把它变成一个真正的复制品。希望能有所帮助

    private void ControlsToTabPage(TabPage from, TabPage to)
    {
        Control[] ctrlArray = new Control[from.Controls.Count];
        from.Controls.CopyTo(ctrlArray, 0);
        to.Controls.AddRange(ctrlArray);
    }