无论我们再使用Winform中的TabControl 还是第三方的插件的,如DotnetBar、DevExpress等等,我们都可以在将一个窗体嵌入到TabControl的TabItem中的TabControlPanel中,具体的实现不是这里讲解的重点,如有需要可以发邮件到我的邮箱中获取代码。
在通常的操作中,我们只要触发TabItem上的关闭按钮就可以关闭当前的TabItem,但是关闭TabItem的时候,并没有触发内嵌窗体的关闭窗体事件,有很多时候我们都需要在关闭内嵌窗体的事件中释放对象等等操作。但是TabItem也没有关闭事件,同时TabItem中的TabControlPanel里也没有关闭事件,其实有也不会触发的。其实在TabControl中有TabItemClose事件,我们可以在这个事件中经行内嵌窗体关闭事件的处理,即,在关闭TabItem的中同时也触发内嵌窗体的关闭事件。
我们首先要完成的准备工作就是使用C#中提供的键值类库System.Collections.Generic.Dictionary<>保存窗体的Name属性值和对应的TabItem的Text属性(即显示在TabItem上的内容),实例代码如下:
首先声明变量:
private Dictionary<string,string> tablItem = new Dictionary<string,string>();
然后保存对应的属性值:
if (!tablItem.ContainsKey(tabName))
{
tablItem.Add(tabName, form.Name);
}
接下来我们在TabControl中的TabItemClose事件中经行处理:
private void superTabControl1_TabItemClose(object sender, SuperTabStripTabItemCloseEventArgs e)
{
string slectedTab = this.superTabControl1.SelectedTab.Text;//获取当前TabItem的显示文本
string controlName=null;
tablItem.TryGetValue(slectedTab,out controlName);//获取当前TabItem中内嵌的Form的Name属性值
Form frm = this.superTabControl1.SelectedPanel.Controls.Find(controlName, false)[0] as Form;//获取内嵌的Form对象
frm.Close(); //调用form的close事件,即触发了内嵌窗体的关闭事件
}
结束。如果有什么问题可以发邮件。