从选项卡控件中删除选项卡页面并将该页面显示为新窗口

时间:2015-02-11 13:19:49

标签: c# winforms tabcontrol

我正在使用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;

有没有解决这个问题。还是其他任何可能的出路?

任何帮助将不胜感激

提前致谢

1 个答案:

答案 0 :(得分:3)

您的代码有几个问题:

  1. 您已将事件处理程序附加到TabControl并将其强制转换为TabItem。因此,您收到此错误。

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

  3. 您无法设置Form.Content。你必须单独添加它们。

  4. 此示例应该有效:

    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();
        }
    }