我搜索这个互联网,但我找不到如何用C#做复制的TabControl选项卡
什么,我要做的是让这个当我在我的NewTab
按钮点击,一个新的标签与第一个标签上的控件相同。我看到了一些关于如何在表单中添加UserControl
的信息,但C#没有这样的东西。
对于每个想说“发布你的代码”的人来说,我没有任何东西,所以不要担心,我唯一的代码是程序的代码,并不会帮助任何人。
我搜索这个互联网,但我找不到如何用C#做复制的TabControl选项卡
什么,我要做的是让这个当我在我的NewTab
按钮点击,一个新的标签与第一个标签上的控件相同。我看到了一些关于如何在表单中添加UserControl
的信息,但C#没有这样的东西。
对于每个想说“发布你的代码”的人来说,我没有任何东西,所以不要担心,我唯一的代码是程序的代码,并不会帮助任何人。
我已经改写了我的解决方案以使用反射。
using System.Reflection;
// your TabControl will be defined in your designer
TabControl tc;
// as will your original TabPage
TabPage tpOld = tc.SelectedTab;
TabPage tpNew = new TabPage();
foreach(Control c in tpOld.Controls)
{
Control cNew = (Control) Activator.CreateInstance(c.GetType());
PropertyDescriptorCollection pdc = TypeDescriptor.GetProperties(c);
foreach (PropertyDescriptor entry in pdc)
{
object val = entry.GetValue(c);
entry.SetValue(cNew, val);
}
// add control to new TabPage
tpNew.Controls.Add(cNew);
}
tc.TabPages.Add(tpNew);
有些信息可以在这里找到。 http://www.codeproject.com/Articles/12976/How-to-Clone-Serialize-Copy-Paste-a-Windows-Forms
您最好的选择是看这篇文章:
然后应用下面的代码添加克隆控制(这将是您的按钮单击处理程序代码(基于文章):
private void button1_Click(object sender, EventArgs e)
{
// create new tab
TabPage tp = new TabPage();
// iterate through each control and clone it
foreach (Control c in this.tabControl1.TabPages[0].Controls)
{
// clone control (this references the code project download ControlFactory.cs)
Control ctrl = CtrlCloneTst.ControlFactory.CloneCtrl(c);
// now add it to the new tab
tp.Controls.Add(ctrl);
// set bounds to size and position
ctrl.SetBounds(c.Bounds.X, c.Bounds.Y, c.Bounds.Width, c.Bounds.Height);
}
// now add tab page
this.tabControl1.TabPages.Add(tp);
}
那么你就需要挂钩的事件处理起来将不得不考虑这个
我知道这是一条古老的线索,但我只是想出了一条适合自己的方式,并认为我应该分享它。它非常简单,并且在.Net 4.6中进行了测试。
请注意,此解决方案实际上并未创建新控件,只是将它们全部重新分配给新的TabPage,因此每次更改选项卡时都必须使用AddRange。新标签会显示完全相同的控件,内容和值。
// Create an array and copy controls from first tab to it.
Array tabLayout = new Control [numberOfControls];
YourTabControl.TabPages[0].Controls.CopyTo(tabLayout, 0);
// AddRange each time you change a tab.
YourTabControl.TabPages[newTabIndex].Controls.AddRange((Control[])tabLayout);
'C#没有UserControl?'这是一个奇怪的说法。是的,为您的选项卡的内容制作一个UserControl,然后在制作新的选项卡页时,将实例化该UserControl并将其添加到新的TabPage控件集合中。相应地连接任何事件。 – LarsTech
我在哪里可以找到UserControl? – Dozer789
关闭我的头顶上,你可能需要添加一个选项卡到选项卡集合,然后迭代地处理每个控件,创建一个新的实例并使用反射复制属性,然后添加到新选项卡。显然不像这样简单,但可能会让你开始。 UserControl - 为什么不尝试向你的C#项目添加一个新的UserControl项目并且玩一玩。 – Andez