从选项卡控件中删除选项卡页并将页面显示为新窗口
问题描述:
我正在使用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;
是否有任何修复此。或者任何其他可能的出路?
任何帮助,将不胜感激提前
感谢
答
有几个问题你代码:
您附上您的事件处理程序到TabControl,并转换为TabItem的。因为你得到这个错误。
TabItem和Window是错误的对象。它们都用于WPF应用程序。对于WinForm,你必须使用TabPage和表格
你不能设置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();
}
}
我想你会需要一个不同的方法来遍历控件,调用Controls.Add被那里将删除该标签页面的控制这将反过来停止迭代的foreach循环(只能复制1次控制)。类似while(CurrentTab.Controls.Count> 0){newWindow.Controls.Add(CurrentTab.Controls [0];} – 2015-02-11 14:18:36
@seberoth:非常感谢! – 2015-02-12 05:10:19