2015-02-11 49 views
0

我正在使用WinForms的Windows应用程序中工作。我有一个选项卡控件(tabMain),并双击标签页页眉我需要将其内容移动到一个新的窗口,并从tabMain删除选项卡。从选项卡控件中删除选项卡页并将页面显示为新窗口

这是我试过的代码。

private void tabMain_MouseDoubleClick(object sender, MouseEventArgs e) 
    {    
     System.Windows.Controls.TabItem tab = (System.Windows.Controls.TabItem)sender; 
     var CurrentTab=tabMain.SelectedTab;    
     if (tabMain.TabPages.Count == 0) return; 
     tabMain.TabPages.Remove(tabMain.SelectedTab); 
     System.Windows.Window newWindow=new System.Windows.Window(); 
     newWindow.Content = tab.Content; 
     newWindow.Show();   
    } 

在这样做,我得到一个错误“无法投型‘System.Windows.Forms.TabControl’的对象键入‘System.Windows.Controls.TabItem’。”对于行:

System.Windows.Controls.TabItem tab = (System.Windows.Controls.TabItem)sender; 

是否有任何修复此。或者任何其他可能的出路?

任何帮助,将不胜感激提前

感谢

回答

3

有几个问题你代码:

  1. 您附上您的事件处理程序到TabControl,并转换为TabItem的。因为你得到这个错误。

  2. TabItem和Window是错误的对象。它们都用于WPF应用程序。对于WinForm,你必须使用TabPage和表格

  3. 你不能设置Form.Content。你必须单独添加它们。

这个例子应该工作:

private void tabMain_MouseDoubleClick(object sender, MouseEventArgs e) 
{ 
    if (tabMain.TabPages.Count > 0) 
    { 
     TabPage CurrentTab = tabMain.SelectedTab; 
     tabMain.TabPages.Remove(CurrentTab); 
     Form newWindow = new Form(); 

     foreach (Control ctrl in CurrentTab.Controls) 
     { 
      newWindow.Controls.Add(ctrl); 
     } 

     newWindow.Show(); 
    } 
} 
+0

我想你会需要一个不同的方法来遍历控件,调用Controls.Add被那里将删除该标签页面的控制这将反过来停止迭代的foreach循环(只能复制1次控制)。类似while(CurrentTab.Controls.Count> 0){newWindow.Controls.Add(CurrentTab.Controls [0];} – 2015-02-11 14:18:36

+0

@seberoth:非常感谢! – 2015-02-12 05:10:19

相关问题