从选项卡控件中删除选项卡页并将页面显示为新的 Window

Remove tab page from a tab control and display the page as a new Window

我正在使用 WinForms 开发 Windows 应用程序。我有一个选项卡控件 (tabMain),双击选项卡页眉我需要将其内容移动到新的 window 并从 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();        
    } 

在执行此操作时,我收到以下行的错误 "Unable to cast object of type 'System.Windows.Forms.TabControl' to type 'System.Windows.Controls.TabItem'.":

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

有没有解决这个问题的方法。或者还有其他可能的出路吗?

如有任何帮助,我们将不胜感激

提前致谢

你的代码有几个问题:

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

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

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