tabstrip.cs
来自「Fireball.CodeEditor is an source code ed」· CS 代码 · 共 559 行 · 第 1/2 页
CS
559 行
_VisibleCount = i;
if (right > _StripButtonRect.Width)
break;
}
if (_SelectedItem != null)
{
if (this.Controls.GetChildIndex(_SelectedItem) != 0)
{
e.Graphics.DrawLine(SystemPens.ControlDark, 0, _SelectedItem.StripRect.Bottom - 1,
_SelectedItem.StripRect.Left - 10, _SelectedItem.StripRect.Bottom - 1);
}
e.Graphics.DrawLine(SystemPens.ControlDark, _SelectedItem.StripRect.Right, _SelectedItem.StripRect.Bottom - 1,
this.ClientSize.Width, _SelectedItem.StripRect.Bottom - 1);
e.Graphics.DrawLine(Pens.White, _SelectedItem.StripRect.Left - 9,
_SelectedItem.StripRect.Bottom - 1, _SelectedItem.StripRect.Right,
_SelectedItem.StripRect.Bottom - 1);
}
if (_SelectedItem == null) return;
_CloseButton.Activated = _SelectedItem.CanClose;
_MenuGlyph.DrawGlyph(e.Graphics);
if (_SelectedItem.CanClose)
_CloseButton.DrawCross(e.Graphics);
}
public void AddTab(TabStripItem tabItem)
{
this.Controls.Add(tabItem);
}
public void RemoveTab(TabStripItem tabItem)
{
this.Controls.Remove(tabItem);
}
protected override void OnMouseDown(MouseEventArgs e)
{
base.OnMouseDown(e);
if (e.Button != MouseButtons.Left)
return;
if (_MenuGlyph.GlyphRect.Contains(e.Location))
{
loadMenuItems();
if (_ContextDocsList.Visible == false)
_ContextDocsList.Show(this, new Point(e.X, _MenuGlyph.GlyphRect.Bottom));
}
if (_CloseButton.CrossRect.Contains(e.Location) && this.SelectedItem.CanClose )
{
TabStripItemClosingEventArgs evt = new TabStripItemClosingEventArgs(_SelectedItem);
OnTabStripItemClosing(evt);
if (!evt.Cancel)
{
this.Controls.Remove(_SelectedItem);
this.OnTabStripItemClosing(EventArgs.Empty);
}
}
this.Invalidate();
TabStripItem selected = null;
for (int i = 0; i < this.Controls.Count; i++)
{
TabStripItem current = (TabStripItem)this.Controls[i];
if (current.StripRect.Contains(e.Location))
{
current.DrawState |= DrawItemState.Selected;
if (current.StripRect.Right > _StripButtonRect.Right)
{
break;
}
else
{
selected = current;
break;
}
}
}
if (selected == null)
return;
this.SelectedItem = selected;
this.Invalidate();
}
protected override void OnControlRemoved(ControlEventArgs e)
{
base.OnControlRemoved(e);
if (this.Controls.Count > 0)
this.SelectedItem = (TabStripItem)this.Controls[this.Controls.Count - 1];
else
this.SelectedItem = null;
}
public virtual void OnTabStripItemClosing(TabStripItemClosingEventArgs e)
{
if (TabStripItemClosing != null)
{
TabStripItemClosing(e);
}
}
public virtual void OnTabStripItemClosing(EventArgs e)
{
if (TabStripItemClosed != null)
{
TabStripItemClosed(this,e);
}
}
void SelectItem(TabStripItem tabItem)
{
tabItem.Visible = true;
tabItem.DrawState |= DrawItemState.Selected;
}
void UnSelectItem(TabStripItem tabItem)
{
tabItem.Visible = false;
tabItem.DrawState = DrawItemState.None;
}
void loadMenuItems()
{
_ContextDocsList.Items.Clear();
for (int i = 0; i < this.Controls.Count; i++)
{
TabStripItem item = (TabStripItem)this.Controls[i];
ToolStripMenuItem tItem = new ToolStripMenuItem(item.Text);
tItem.Tag = item;
_ContextDocsList.Items.Add(tItem);
}
}
void _ContextDocsList_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
{
this.SelectedItem = (TabStripItem)e.ClickedItem.Tag;
}
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
if (_MenuGlyph.GlyphRect.Contains(e.Location))
{
_MenuGlyph.IsMouseOver = true;
this.Invalidate(_MenuGlyph.GlyphRect);
}
else
{
if (_MenuGlyph.IsMouseOver != false)
{
_MenuGlyph.IsMouseOver = false;
this.Invalidate(_MenuGlyph.GlyphRect);
}
}
if (_CloseButton.CrossRect.Contains(e.Location))
{
_CloseButton.IsMouseOver = true;
this.Invalidate(_CloseButton.CrossRect);
}
else
{
if (_CloseButton.IsMouseOver != false)
{
_CloseButton.IsMouseOver = false;
this.Invalidate(_CloseButton.CrossRect);
}
}
}
protected override void OnMouseLeave(EventArgs e)
{
base.OnMouseLeave(e);
_MenuGlyph.IsMouseOver = false;
this.Invalidate(_MenuGlyph.GlyphRect);
_CloseButton.IsMouseOver = false;
this.Invalidate(_CloseButton.CrossRect);
}
void DrawButton(Graphics gfx, RectangleF buttonRect, DrawItemState state, int buttonIndex)
{
GraphicsPath _Path = new GraphicsPath();
int mtop = 3;
if ((state &= DrawItemState.Selected) == DrawItemState.Selected || buttonIndex == 0)
_Path.AddLine(buttonRect.Left - 10, buttonRect.Bottom - 1, buttonRect.Left + (buttonRect.Height / 2) - 4, mtop + 4);
else
{
_Path.AddLine(buttonRect.Left, buttonRect.Bottom - 1, buttonRect.Left,
buttonRect.Bottom - (buttonRect.Height / 2) - 2);
_Path.AddLine(buttonRect.Left, buttonRect.Bottom - (buttonRect.Height / 2) - 3,
buttonRect.Left + (buttonRect.Height / 2) - 4, mtop + 3);
}
_Path.AddLine(buttonRect.Left + (buttonRect.Height / 2) + 2,
mtop, buttonRect.Right - 3, mtop);
_Path.AddLine(buttonRect.Right, mtop + 2, buttonRect.Right,
buttonRect.Bottom - 1);
_Path.AddLine(buttonRect.Right - 4, buttonRect.Bottom - 1, buttonRect.Left,
buttonRect.Bottom - 1);
_Path.CloseFigure();
LinearGradientBrush _brush = null;
if ((state &= DrawItemState.Selected) == DrawItemState.Selected)
{
_brush = new LinearGradientBrush(buttonRect,
SystemColors.ControlLightLight, SystemColors.Window,
LinearGradientMode.Vertical);
}
else
{
_brush = new LinearGradientBrush(buttonRect,
SystemColors.ControlLightLight, SystemColors.Control,
LinearGradientMode.Vertical);
}
gfx.FillPath(_brush, _Path);
gfx.DrawPath(SystemPens.ControlDark, _Path);
}
protected override void OnSizeChanged(EventArgs e)
{
base.OnSizeChanged(e);
_StripButtonRect = new Rectangle(0, 0, this.ClientSize.Width - 40, 10);
_MenuGlyph.GlyphRect = new Rectangle(this.ClientSize.Width - 39, 2, 16, 16);
_CloseButton.CrossRect = new Rectangle(this.ClientSize.Width - 20,2, 16, 16);
if (_SelectedItem != null)
{
if (_SelectedItem.StripRect.Right > _StripButtonRect.Right)
{
this.Controls.SetChildIndex(_SelectedItem, 0);
}
}
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?