Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将控件从一个选项卡页移动到另一个选项卡页_C#_.net_Winforms_Tabs - Fatal编程技术网

C# 将控件从一个选项卡页移动到另一个选项卡页

C# 将控件从一个选项卡页移动到另一个选项卡页,c#,.net,winforms,tabs,C#,.net,Winforms,Tabs,我目前正在从事一个WinForm项目,其中有几个不同的选项卡。在每个选项卡中都有各种控件,如按钮、子选项卡、文本框等 我需要整合整个应用程序,其中包括从一个选项卡获取某些控件并将它们移动到另一个选项卡。当我第一次尝试这样做时,我只是复制并粘贴控件。您可以想象,由于我没有使用控件移动属性,所以这不起作用,我实际上只是在另一个选项卡上创建了新的属性。因此,当我遵守代码时,没有任何工作,因为没有为新控制分配代码 当我再次尝试时,这次我剪切并粘贴了与旧控件(特别是代码中的引用名称)相同的属性,因此,据我

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

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

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

此时,我不知道该怎么办…

当您“切断”控件时,会切断控件及其各自事件之间的连接。当你再次“粘贴”它们时,它们不再与事件挂钩,因此它们看起来什么都不做

“event”方法应该仍然存在于代码中,但是您必须手动检查每个事件并再次订阅每个控件(通过Properties窗口)

或者,还原这些更改,然后打开
.Designer.cs
文件并查找以下内容:

this.tabPage1.Controls.Add(this.dataGridView1);
例如,它将
dataGridView1
放在
tabPage1

如果要将DataGridView移动到另一个TabPage,只需将上述代码中的
this.tabPage1
更改为
this.tabPage2

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

然后,您可以切换回designer视图,并将控件移动到选项卡页面中您想要的任何位置。

这将从第一个选项卡页面中剪切控件并将其粘贴到第二个选项卡页面上,我认为您可以随时执行此操作。只要稍作改动,你就能把它变成真正的复制品。 希望能有帮助

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

我刚测试过。当您剪切和粘贴控件时,会发生什么,您将丢失事件的连接。剪切和粘贴后,您需要做的是转到control
properties events
,找到有问题的事件,然后在右侧选择要处理该事件的方法。

使用文档大纲

查看。。。其他窗口。。。文件大纲


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

将该项从选项卡控件中拖到表单本身上。切换到另一个选项卡。然后将项目拖到该选项卡中。它本质上是两次拖动,但由于您从未剪切,所有代码链接都将保持不变。如果选项卡控件占据整个表单,只需在执行上述步骤时将其缩小,然后在完成后将其再次放大即可。

非常感谢!这一直困扰着我!是的,但无论如何这是一个皮塔。而且有可能忘记一些。非常感谢你的建议!非常感谢你的帮助。我是否需要为涉及的每个控件输入这段代码?(因为有很多)。或者它只是把所有的控件从一个标签页移到另一个标签页上。格兰特说的我想做的是对的。不过T.S.似乎已经解决了这个问题。谢谢非常感谢你的建议。你是对的。我确实想在控制时间移动它们。但据我所知,当我将控件从一个选项卡移动到另一个选项卡时,自动生成的代码已经对其进行了自我编辑。这非常有效。在我的表单上有很多控件之后,当我想创建选项卡时,我也使用了它,我想在一个选项卡上放置一些控件,在另一个选项卡上放置一些控件。我刚刚选择了选项卡,然后将控件从窗体拖到该选项卡上@DeWBEE,你可能会考虑选择这个答案作为首选方法,因为它被添加了很多。我也这样做过。另一个技巧是,如果我同时在选项卡之间移动一组控件,我将在选项卡中创建一个组,将项目拖到组中,将组拖到表单中,然后将组拖到新选项卡,最后将控件拖出组。群组容器让我可以一起做,而不会造成混乱。太棒了!以前从未使用过那扇窗户,非常方便!