2015-01-07 5 views
1

tabcontroladv에서 tabbarpage에 대한 복제본을 어떻게 만들 수 있습니까?tabcontroladv에서 tabbarpage에 대한 복제본을 만드는 방법은 무엇입니까?

복제본을 만들었지 만 상위 컨트롤을 변경하면 복제 된 컨트롤에 반영됩니다. 부모와 복제 된 컨트롤이 분리되어 있어야합니다. 나는 아래의 코드를 사용했습니다 : 복제는 복제 리부팅에 반영됩니다 부모 컨트롤의 변화를 만들어

private void button1_Click(object sender, EventArgs e) 
{ 
    TabPage newPage = new TabPage(); 
    foreach (Control c in tabControl1.TabPages[0].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); 
     } 
     newPage.Controls.Add(cNew); 
    } 

    tabControl1.TabPages.Add(newPage); 
} 

후.

이 샘플을 사용할 수 있습니까 ?? 클론을 만드는 법. 부모의 변화가 복제 된 통제에 반영되어서는 안됩니다.

+0

이 문제는 보통의 WinForm을 TabControl/TabPage으로 재현 할 수 있습니까? – kennyzx

답변

1

예, 상위 TabBarPage의 변경 사항이 복제 된 TabBarPage에 반영되어서는 안되기 때문에 TabBarPage의 컨트롤을 복제 할 수 있습니다.

TabBarPage newPage;

// To Copy 
newPage = new TabBarPage(); 
foreach (Control c in this.tabBarSplitterControl1.ActivePage.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); 
    } 
    newPage.Controls.Add(cNew); 
} 
newPage.Text = "New Tab"; 

// To Paste 
this.tabBarSplitterControl1.TabBarPages.Add(newPage); 

샘플 링크 : http://www.syncfusion.com/downloads/support/directtrac/general/Cloning964503659.zip

관련 문제