C# 如何使用c从tabcontrol中删除选项卡#

C# 如何使用c从tabcontrol中删除选项卡#,c#,winforms,C#,Winforms,当我将每个选项卡引用到子窗体时,如何从tabcontrol中删除选项卡 我使用的是tabcontrol,我想从控件中删除一个特定的选项卡。我必须在动态生成的字符串中执行此操作的值 如何使用字符串中的现有选项卡名称从tabcontrol中删除选项卡 我尝试了一些像 string tabToRemove = "tabPageName"; for (int i = 0; i < myTabControl.TabPages.Count; i++) { if (myTabControl.TabPa

当我将每个选项卡引用到子窗体时,如何从tabcontrol中删除选项卡

我使用的是tabcontrol,我想从控件中删除一个特定的选项卡。我必须在动态生成的字符串中执行此操作的值

如何使用字符串中的现有选项卡名称从tabcontrol中删除选项卡

我尝试了一些像

 string tabToRemove = "tabPageName";
for (int i = 0; i < myTabControl.TabPages.Count; i++)
{
if (myTabControl.TabPages[i].Name.Equals(tabToRemove, StringComparison.OrdinalIgnoreCase))
{
    myTabControl.TabPages.RemoveAt(i);
    break;
}

子窗体:


使用系统;
使用系统图;
使用系统集合;
使用系统组件模型;
使用System.Windows.Forms;
使用系统数据;
使用系统诊断;
使用System.Drawing.Drawing2D;
命名空间守护进程
{
/// 
///MDIChild的摘要说明。
/// 
/// 
公共类MDIChild:System.Windows.Forms.Form
{
/// 
///必需的设计器变量。
/// 
private System.ComponentModel.Container components=null;
私有TabControl tabCtrl;
私人标签页;
公共儿童()
{
//
//需要Windows窗体设计器支持
//
初始化组件();
//MDIChild targetPerform=新MDIChild();
//WinApi.SetWinFullScreen(targetPerform.Handle);
//
//TODO:在InitializeComponent调用后添加任何构造函数代码
//
}
/// 
///清理所有正在使用的资源。
/// 
受保护的覆盖无效处置(布尔处置)
{
如果(处置)
{
if(组件!=null)
{
组件。Dispose();
}
}
基地。处置(处置);
}
公共选项卡页
{
得到
{
返回塔巴;
}
设置
{
tabPag=值;
}
}
公共选项卡控件TabCtrl
{
设置
{
tabCtrl=值;
}
}
#区域Windows窗体设计器生成的代码
/// 
///设计器支持所需的方法-不修改
///此方法的内容与代码编辑器一起使用。
/// 
私有void InitializeComponent()
{
这个.SuspendLayout();
// 
//MDIChild
// 
this.AutoScaleBaseSize=新系统.图纸.尺寸(5,13);
this.AutoSizeMode=System.Windows.Forms.AutoSizeMode.growtandshrink;
this.BackColor=System.Drawing.SystemColors.inactivecapontext;
this.ClientSize=新系统.Drawing.Size(0,0);
this.FormBorderStyle=System.Windows.Forms.FormBorderStyle.None;
this.ebox=false;
this.ebox=false;
this.Name=“MDIChild”;
这个。不透明度=0;
this.ShowIcon=false;
this.SizeGripStyle=System.Windows.Forms.SizeGripStyle.Hide;
this.Text=“MDIChild”;
this.Activated+=新的System.EventHandler(this.MDIChild\u已激活);
this.Closing+=新的System.ComponentModel.CancelEventHandler(this.MDIChild\u Closing);
此选项为.resume布局(false);
}
#端区
私有无效MDIChild\u关闭(对象发送方,System.ComponentModel.CancelEventArgs e)
{
尝试
{
//关闭MDI子窗体时销毁相应的选项卡页
this.tabPag.Dispose();
//如果没有剩余的选项卡页
如果(!tabCtrl.HasChildren)
{
tabCtrl.Visible=false;
}
}
捕获(例外情况除外)
{ 
}
}
私有无效MDIChild_已激活(对象发送方,System.EventArgs e)
{
尝试
{
//激活相应的选项卡页
tabCtrl.SelectedTab=tabPag;
如果(!tabCtrl.Visible)
{
tabCtrl.Visible=true;
}
Global.ExistingTabProcessNames.Add(tabPag.Text);
}
捕获(例外情况除外)
{ 
}
}
}
}

对于初学者,您应该以另一种方式循环:

for (int i = myTabControl.TabPages.Count - 1; i >= 0 ; i--)
{
   ......
}
编辑:别理我。我错过了休息时间;是的,它也应该是>=:(

我的下一个理论是你错过了这一行:

 // add the page to the tab control
 tabControl1.Controls.Add(tp);

PS:为什么从中复制代码却不能维护CRLFs。这很烦人!

对于初学者来说,你应该以另一种方式循环:

for (int i = myTabControl.TabPages.Count - 1; i >= 0 ; i--)
{
   ......
}
编辑:忽略我。我错过了休息时间;是的,它也应该是>=:(

我的下一个理论是你错过了这一行:

 // add the page to the tab control
 tabControl1.Controls.Add(tp);

PS:为什么从中复制代码而不维护CRLFs。这很烦人!

我不知道代码的用途,但是如果您最终将重新添加选项卡,为什么不隐藏它呢?这很容易,而且您不必担心页面隐藏后的反向循环逻辑和无效参数等问题。如果您需要一种解决方法一次检查所有选项卡,只需检查可见的选项卡…

我不知道代码的用途,但是如果最终要重新添加选项卡,为什么不隐藏它呢?这很容易,而且你不必担心页面隐藏后的反向循环逻辑和无效参数等问题。如果需要一种方法同时处理所有选项卡,只需o检查可见选项卡…

我建议查看选项卡页面示例以添加/删除选项卡。

我建议查看选项卡页面示例以添加/删除选项卡。

正如jussij所建议的,您需要执行以下操作:

tabControl1.Controls.Add(tp);
您可以更轻松地找到选项卡,如下所示:

var foundTab = (from System.Windows.Forms.TabPage tab in tabControl1.TabPages.Cast<TabPage>()
                where tab.Name == "tabName"
                select tab).First();
var foundTab=(来自tabControl1.TabPages.Cast()中的System.Windows.Forms.TabPage选项卡)
其中tab.Name==“tabName”
塞勒