131 lines
3.2 KiB
C#
131 lines
3.2 KiB
C#
using System;
|
|
using System.Windows.Forms;
|
|
using System.Windows.Forms.Design;
|
|
using System.Collections;
|
|
using System.Drawing;
|
|
using System.ComponentModel.Design;
|
|
using System.ComponentModel;
|
|
|
|
namespace DevComponents.DotNetBar
|
|
{
|
|
/// <summary>
|
|
/// Summary description for TabControlDesigner.
|
|
/// </summary>
|
|
public class TabControlDesigner:TabStripDesigner
|
|
{
|
|
public TabControlDesigner()
|
|
{
|
|
}
|
|
|
|
protected override void CreateNewTab(object sender, EventArgs e)
|
|
{
|
|
IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost));
|
|
TabControl tabControl=this.Control as TabControl;
|
|
if(tabControl==null || dh==null)
|
|
return;
|
|
|
|
IComponentChangeService change=this.GetService(typeof(IComponentChangeService)) as IComponentChangeService;
|
|
if(change!=null)
|
|
change.OnComponentChanging(this.Component,null);
|
|
|
|
TabItem tab=dh.CreateComponent(typeof(TabItem)) as TabItem;
|
|
tab.Text=tab.Name;
|
|
|
|
TabControlPanel panel=dh.CreateComponent(typeof(TabControlPanel)) as TabControlPanel;
|
|
tabControl.ApplyDefaultPanelStyle(panel);
|
|
tab.AttachedControl=panel;
|
|
panel.TabItem=tab;
|
|
|
|
tabControl.Tabs.Add(tab);
|
|
tabControl.Controls.Add(panel);
|
|
panel.Dock=DockStyle.Fill;
|
|
panel.SendToBack();
|
|
|
|
tabControl.RecalcLayout();
|
|
|
|
if(change!=null)
|
|
change.OnComponentChanged(this.Component,null,null,null);
|
|
|
|
if(change!=null)
|
|
{
|
|
change.OnComponentChanging(panel,null);
|
|
change.OnComponentChanged(panel,null,null,null);
|
|
}
|
|
}
|
|
|
|
public override bool CanParent(Control c)
|
|
{
|
|
if(c is TabControlPanel)
|
|
return true;
|
|
return false;
|
|
}
|
|
|
|
protected override void InternalComponentRemoving(ComponentEventArgs e)
|
|
{
|
|
if(m_InternalRemove)
|
|
return;
|
|
IDesignerHost dh=(IDesignerHost)GetService(typeof(IDesignerHost));
|
|
if(dh==null)
|
|
return;
|
|
|
|
if(e.Component is TabControlPanel && this.Control!=null && this.Control.Controls.Contains(e.Component as Control))
|
|
{
|
|
try
|
|
{
|
|
TabControlPanel panel=e.Component as TabControlPanel;
|
|
if(panel.TabItem!=null)
|
|
{
|
|
TabControl tabControl=this.Control as TabControl;
|
|
tabControl.Tabs.Remove(panel.TabItem);
|
|
dh.DestroyComponent(panel.TabItem);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
m_InternalRemove=false;
|
|
}
|
|
}
|
|
else if(e.Component is TabItem && this.Control!=null && ((TabControl)this.Control).Tabs.Contains(e.Component as TabItem))
|
|
{
|
|
try
|
|
{
|
|
TabItem item=e.Component as TabItem;
|
|
if(item.AttachedControl!=null && this.Control.Controls.Contains(item.AttachedControl))
|
|
{
|
|
TabControl tabControl=this.Control as TabControl;
|
|
tabControl.Controls.Remove(item.AttachedControl);
|
|
dh.DestroyComponent(item.AttachedControl);
|
|
}
|
|
}
|
|
finally
|
|
{
|
|
m_InternalRemove=false;
|
|
}
|
|
}
|
|
}
|
|
|
|
protected override TabStrip GetTabStrip()
|
|
{
|
|
if(this.Control==null || !(this.Control is TabControl))
|
|
return null;
|
|
return ((TabControl)this.Control).TabStrip;
|
|
}
|
|
|
|
public override System.Collections.ICollection AssociatedComponents
|
|
{
|
|
get
|
|
{
|
|
ArrayList c=new ArrayList(base.AssociatedComponents);
|
|
TabControl tabControl=this.Control as TabControl;
|
|
if(tabControl!=null)
|
|
{
|
|
foreach(TabItem tab in tabControl.Tabs)
|
|
c.Add(tab);
|
|
}
|
|
|
|
return c;
|
|
}
|
|
}
|
|
}
|
|
}
|