C# ToolStrip制作四边停靠浮动工具栏
C# ToolStrip制作四边停靠浮动工具栏
发布时间:2016-12-28 来源:查字典编辑
摘要:关于浮动工具条的制作,阿捷写了一篇很不错的文章,见:http://www.jb51.net/article/44272.htm阿捷这个工具条...

关于浮动工具条的制作,阿捷写了一篇很不错的文章,见:http://www.jb51.net/article/44272.htm

阿捷这个工具条浮动后只能在顶部停靠,基于此,我在这边增加在左/右/底部停靠,停靠条件是浮动窗体紧贴或越过主窗体边缘。

其实阿捷给出的代码已经相当详细了:) 我这里主要给出重写的ToolStrip代码段,增加了三个ToolStripPanel

复制代码 代码如下:

public partial class MyToolStrip : ToolStrip

{

public MyToolStrip()

{

InitializeComponent();

this.EndDrag += new EventHandler(MyToolStrip_EndDrag);

this.SizeChanged += new EventHandler(MyToolStrip_SizeChanged);

}

#region 漂浮状态

public ToolStripFloatWindow FloatWindow { get; set; }

private bool isFloating

{

get

{

return (FloatWindow != null);

}

}

public ToolStripPanel TopToolStripPanel { get; set; }

public ToolStripPanel BottomToolStripPanel { get; set; }

public ToolStripPanel LeftToolStripPanel { get; set; }

public ToolStripPanel RightToolStripPanel { get; set; }

#endregion

#region 漂浮实现

private void FloatWindow_LocationChanged(object sender, EventArgs e)

{

//当floatwindws的位置移动到 toolstrippanel中时,将this放置到 toolstripPanel上

if (this.FloatWindow == null)

{

return;

}

if (FloatWindow.HasCreated)

{

//主窗体位置

Point frmLoc = this.TopToolStripPanel.Parent.Location;

//浮动工具条位置

Point toolBarLoc = FloatWindow.Location;

if (toolBarLoc.Y - frmLoc.Y <= 0) //置于顶部StripPanel

{

this.FloatWindow.Controls.Remove(this);

this.TopToolStripPanel.SuspendLayout();

this.TopToolStripPanel.Controls.Add(this);

this.Location = this.TopToolStripPanel.PointToClient(toolBarLoc);

this.TopToolStripPanel.ResumeLayout();

this.FloatWindow.Dispose();

this.FloatWindow = null;

return;

}

if (toolBarLoc.X - frmLoc.X <= 0) //置于左边StripPanel

{

this.FloatWindow.Controls.Remove(this);

this.LeftToolStripPanel.SuspendLayout();

this.LeftToolStripPanel.Controls.Add(this);

this.Location = this.LeftToolStripPanel.PointToClient(toolBarLoc);

this.LeftToolStripPanel.ResumeLayout();

this.FloatWindow.Dispose();

this.FloatWindow = null;

return;

}

if (toolBarLoc.X + FloatWindow.Width >= this.TopToolStripPanel.Parent.Width) //置于右边StripPanel

{

this.FloatWindow.Controls.Remove(this);

this.RightToolStripPanel.SuspendLayout();

this.RightToolStripPanel.Controls.Add(this);

this.Location = this.RightToolStripPanel.PointToClient(toolBarLoc);

this.RightToolStripPanel.ResumeLayout();

this.FloatWindow.Dispose();

this.FloatWindow = null;

return;

}

if (toolBarLoc.Y + FloatWindow.Height >= this.TopToolStripPanel.Parent.Height) //置于底部StripPanel

{

this.FloatWindow.Controls.Remove(this);

this.BottomToolStripPanel.SuspendLayout();

this.BottomToolStripPanel.Controls.Add(this);

this.Location = this.BottomToolStripPanel.PointToClient(toolBarLoc);

this.BottomToolStripPanel.ResumeLayout();

this.FloatWindow.Dispose();

this.FloatWindow = null;

return;

}

}

}

private void MyToolStrip_EndDrag(object sender, EventArgs e)

{

Point screenPt = Cursor.Position;

Point clientPt = this.TopToolStripPanel.Parent.PointToClient(screenPt);

//浮动区域

Rectangle floatArea = new Rectangle(32, 32, //我这里图标大小调整为32*32

this.TopToolStripPanel.Parent.Width - 2 * 32,

this.TopToolStripPanel.Parent.Height - 2 * 32);

if (floatArea.Contains(clientPt)) //判断移出时

{

ToolStripFloatWindow fw = new ToolStripFloatWindow();

fw.Controls.Add(this);

this.Left = 0;

this.Top = 0;

this.FloatWindow = fw;

FloatWindow.LocationChanged += new EventHandler(FloatWindow_LocationChanged);

fw.SetBounds(screenPt.X, screenPt.Y, this.ClientSize.Width, this.ClientSize.Height + 22); //22为窗体标题栏高度

fw.Show();

}

}

private void MyToolStrip_SizeChanged(object sender, EventArgs e)

{

if (this.isFloating)

{

this.FloatWindow.Width = this.ClientSize.Width;

}

}

#endregion

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类