dockcontent.cs
来自「SharpDevelop2.0.0 c#开发免费工具」· CS 代码 · 共 866 行 · 第 1/2 页
CS
866 行
if (visibleState == DockState.Hidden || (visibleState != DockState.Unknown && !IsDockStateValid(visibleState)))
throw new InvalidOperationException(ResourceHelper.GetString("DockContent.SetDockState.InvalidState"));
SuspendSetDockState();
DockState oldDockState = DockState;
if (m_isHidden != isHidden)
{
m_isHidden = isHidden;
Visible = !isHidden;
if (HiddenMdiChild != null)
HiddenMdiChild.Visible = (!IsHidden);
}
m_visibleState = visibleState;
m_dockState = isHidden ? DockState.Hidden : visibleState;
if (visibleState != DockState.Unknown)
{
m_isFloat = (m_visibleState == DockState.Float);
if (Pane == null)
Pane = DockPanel.DockPaneFactory.CreateDockPane(this, visibleState, true);
else if (Pane.DockState != visibleState)
{
if (Pane.Contents.Count == 1)
Pane.SetDockState(visibleState);
else
Pane = DockPanel.DockPaneFactory.CreateDockPane(this, visibleState, true);
}
}
else
Pane = null;
SetParent(Pane);
if (oldPane != null && !oldPane.IsDisposed && oldDockState == oldPane.DockState)
RefreshDockPane(oldPane);
if (Pane != null && DockState == Pane.DockState)
{
if ((Pane != oldPane) ||
(Pane == oldPane && oldDockState != oldPane.DockState))
RefreshDockPane(Pane);
}
if (oldDockState != DockState)
{
RefreshMdiIntegration();
OnDockStateChanged(EventArgs.Empty);
}
ResumeSetDockState();
}
private void RefreshDockPane(DockPane pane)
{
pane.RefreshChanges();
pane.ValidateActiveContent();
}
internal string PersistString
{
get { return GetPersistString(); }
}
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Method[@name="GetPersistString()"]/*'/>
protected virtual string GetPersistString()
{
return GetType().ToString();
}
private HiddenMdiChild m_hiddenMdiChild = null;
internal HiddenMdiChild HiddenMdiChild
{
get { return m_hiddenMdiChild; }
}
private bool m_hideOnClose = false;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="HideOnClose"]/*'/>
[LocalizedCategory("Category.Docking")]
[LocalizedDescription("DockContent.HideOnClose.Description")]
[DefaultValue(false)]
public bool HideOnClose
{
get { return m_hideOnClose; }
set { m_hideOnClose = value; }
}
/// <exclude/>
public new MainMenu Menu
{
get { return HiddenMdiChild == null ? base.Menu : HiddenMdiChild.Menu; }
set
{
if (HiddenMdiChild == null)
base.Menu = value;
else
HiddenMdiChild.Menu = value;
}
}
private DockState m_showHint = DockState.Unknown;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="ShowHint"]/*'/>
[LocalizedCategory("Category.Docking")]
[LocalizedDescription("DockContent.ShowHint.Description")]
[DefaultValue(DockState.Unknown)]
public DockState ShowHint
{
get { return m_showHint; }
set
{
if (!DockHelper.IsDockStateValid(value, DockableAreas))
throw (new InvalidOperationException(ResourceHelper.GetString("DockContent.ShowHint.InvalidValue")));
if (m_showHint == value)
return;
m_showHint = value;
}
}
private bool m_isActivated = false;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="IsActivated"]/*'/>
[Browsable(false)]
public bool IsActivated
{
get { return m_isActivated; }
}
internal void SetIsActivated(bool value)
{
if (m_isActivated == value)
return;
m_isActivated = value;
}
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Method[@name="IsDockStateValid(DockState)"]/*'/>
public bool IsDockStateValid(DockState dockState)
{
return DockHelper.IsDockStateValid(dockState, DockableAreas);
}
private ContextMenuStrip m_tabPageContextMenu = null;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="TabPageContextMenu"]/*'/>
[LocalizedCategory("Category.Docking")]
[LocalizedDescription("DockContent.TabPageContextMenu.Description")]
[DefaultValue(null)]
public ContextMenuStrip TabPageContextMenu
{
get { return m_tabPageContextMenu; }
set { m_tabPageContextMenu = value; }
}
private string m_toolTipText = null;
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Property[@name="ToolTipText"]/*'/>
[Localizable(true)]
[Category("Appearance")]
[LocalizedDescription("DockContent.ToolTipText.Description")]
[DefaultValue(null)]
public string ToolTipText
{
get { return m_toolTipText; }
set { m_toolTipText = value; }
}
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Method[@name="Activate()"]/*'/>
public new void Activate()
{
if (DockPanel == null)
base.Activate();
else if (Pane == null)
Show(DockPanel);
else
{
IsHidden = false;
Pane.ActiveContent = this;
Pane.Activate();
}
}
/// <exclude/>
public new void Hide()
{
IsHidden = true;
}
internal void SetParent(Control value)
{
if (Parent == value)
return;
Control oldParent = Parent;
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Workaround for .Net Framework bug: removing control from Form may cause form
// unclosable. Set focus to another dummy control.
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Form form = null;
if (Parent is DockPane)
form = ((DockPane)Parent).FindForm();
if (ContainsFocus)
{
if (form is FloatWindow)
{
((FloatWindow)form).DummyControl.Focus();
form.ActiveControl = ((FloatWindow)form).DummyControl;
}
else if (DockPanel != null)
{
DockPanel.DummyControl.Focus();
if (form != null)
form.ActiveControl = DockPanel.DummyControl;
}
}
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Size = Size.Empty; // To reduce screen flicker
Parent = value;
}
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Method[@name="Show"]/*'/>
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Method[@name="Show()"]/*'/>
public new void Show()
{
if (DockPanel == null)
base.Show();
else
Show(DockPanel);
}
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Method[@name="Show(DockPanel)"]/*'/>
public void Show(DockPanel dockPanel)
{
if (dockPanel == null)
throw(new ArgumentNullException(ResourceHelper.GetString("DockContent.Show.NullDockPanel")));
if (DockState == DockState.Unknown || Pane == null)
Show(dockPanel, DefaultShowState);
else
Activate();
}
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Method[@name="Show(DockPanel, DockState)"]/*'/>
public void Show(DockPanel dockPanel, DockState dockState)
{
if (dockPanel == null)
throw(new ArgumentNullException(ResourceHelper.GetString("DockContent.Show.NullDockPanel")));
if (dockState == DockState.Unknown || dockState == DockState.Hidden)
throw(new ArgumentException(ResourceHelper.GetString("DockContent.Show.InvalidDockState")));
DockPanel = dockPanel;
if (dockState == DockState.Float && FloatPane == null)
Pane = DockPanel.DockPaneFactory.CreateDockPane(this, DockState.Float, true);
else if (PanelPane == null)
{
DockPane paneExisting = null;
foreach (DockPane pane in DockPanel.Panes)
if (pane.DockState == dockState)
{
paneExisting = pane;
break;
}
if (paneExisting == null)
Pane = DockPanel.DockPaneFactory.CreateDockPane(this, dockState, true);
else
Pane = paneExisting;
}
DockState = dockState;
Activate();
}
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Method[@name="Show(DockPanel, Rectangle)"]/*'/>
public void Show(DockPanel dockPanel, Rectangle floatWindowBounds)
{
if (dockPanel == null)
throw(new ArgumentNullException(ResourceHelper.GetString("DockContent.Show.NullDockPanel")));
DockPanel = dockPanel;
if (FloatPane == null)
{
IsHidden = true; // to reduce the screen flicker
FloatPane = DockPanel.DockPaneFactory.CreateDockPane(this, DockState.Float, false);
FloatPane.FloatWindow.StartPosition = FormStartPosition.Manual;
}
FloatPane.FloatWindow.Bounds = floatWindowBounds;
Show(dockPanel, DockState.Float);
Activate();
}
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Method[@name="Show(DockPane, DockContent)"]/*'/>
public void Show(DockPane pane, DockContent beforeContent)
{
if (pane == null)
throw(new ArgumentNullException(ResourceHelper.GetString("DockContent.Show.NullPane")));
if (beforeContent != null && pane.Contents.IndexOf(beforeContent) == -1)
throw(new ArgumentException(ResourceHelper.GetString("DockContent.Show.InvalidBeforeContent")));
DockPanel = pane.DockPanel;
Pane = pane;
pane.SetContentIndex(this, pane.Contents.IndexOf(beforeContent));
Show();
}
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Method[@name="Show(DockPane, DockAlignment, double)"]/*'/>
public void Show(DockPane prevPane, DockAlignment alignment, double proportion)
{
if (prevPane == null)
throw(new ArgumentException(ResourceHelper.GetString("DockContent.Show.InvalidPrevPane")));
if (DockHelper.IsDockStateAutoHide(prevPane.DockState))
throw(new ArgumentException(ResourceHelper.GetString("DockContent.Show.InvalidPrevPane")));
DockPanel = prevPane.DockPanel;
DockPanel.DockPaneFactory.CreateDockPane(this, prevPane, alignment, proportion, true);
Show();
}
/// <exclude/>
protected override void OnClosed(EventArgs e)
{
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
// Workaround of .Net Framework bug to avoid main form unclosable
//!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
if (Environment.Version.Major == 1)
{
if (DockPanel != null)
DockPanel = null;
}
base.OnClosed (e);
}
/// <exclude/>
protected override void OnTextChanged(EventArgs e)
{
if (m_hiddenMdiChild != null)
m_hiddenMdiChild.Text = this.Text;
if (DockHelper.IsDockStateAutoHide(DockState))
DockPanel.RefreshAutoHideStrip();
else if (Pane != null)
{
if (Pane.FloatWindow != null)
Pane.FloatWindow.SetText();
Pane.RefreshChanges();
}
base.OnTextChanged(e);
}
internal void RefreshMdiIntegration()
{
Form mdiParent = GetMdiParentForm();
if (mdiParent == null)
{
if (HiddenMdiChild != null)
{
m_hiddenMdiChild.Close();
m_hiddenMdiChild = null;
}
}
else
{
if (HiddenMdiChild == null)
m_hiddenMdiChild = new HiddenMdiChild(this);
m_hiddenMdiChild.SetMdiParent(mdiParent);
}
if (DockPanel != null)
if (DockPanel.ActiveDocument != null)
if (DockPanel.ActiveDocument.HiddenMdiChild != null)
DockPanel.ActiveDocument.HiddenMdiChild.Activate();
}
private Form GetMdiParentForm()
{
if (DockPanel == null)
return null;
if (!DockPanel.MdiIntegration)
return null;
if (DockState != DockState.Document)
return null;
Form parentMdi = DockPanel.FindForm();
if (parentMdi != null)
if (!parentMdi.IsMdiContainer)
parentMdi = null;
return parentMdi;
}
private DockPaneTab m_dockPaneTab = null;
internal DockPaneTab DockPaneTab
{
get { return m_dockPaneTab; }
}
private AutoHideTab m_autoHideTab = null;
internal AutoHideTab AutoHideTab
{
get { return m_autoHideTab; }
}
#region Events
private static readonly object DockStateChangedEvent = new object();
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Event[@name="DockStateChanged"]/*'/>
[LocalizedCategory("Category.PropertyChanged")]
[LocalizedDescription("Pane.DockStateChanged.Description")]
public event EventHandler DockStateChanged
{
add { Events.AddHandler(DockStateChangedEvent, value); }
remove { Events.RemoveHandler(DockStateChangedEvent, value); }
}
/// <include file='CodeDoc\DockContent.xml' path='//CodeDoc/Class[@name="DockContent"]/Method[@name="OnDockStateChanged(EventArgs)"]/*'/>
protected virtual void OnDockStateChanged(EventArgs e)
{
EventHandler handler = (EventHandler)Events[DockStateChangedEvent];
if (handler != null)
handler(this, e);
}
#endregion
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?