热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#实现可浮动工具栏功能

本文介绍如何在C#中实现一个可浮动的工具栏,即工具栏可以从其初始位置拖出,并且可以重新拖回原位。通过创建一个新的窗口作为工具栏的容器,并利用.NETFramework提供的ToolStrip控件,可以轻松实现这一功能。

可浮动工具栏是指工具栏可以从其初始位置拖出,并且可以重新拖回原位。以下是实现该功能的效果图:

实现这一功能的基本思路如下:

  1. 当工具栏被拖出后,需要创建一个合适大小的窗口作为工具栏的新容器。这个窗口可以设置为:
    FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
    ShowIcon = false;
    ShowInTaskbar = false;
    TopMost = true;
  2. 浮动工具栏可以扩展自 .NET Framework 提供的 ToolStrip 控件。当工具栏被拖动到某个位置并松开鼠标左键时,会触发 EndDrag 事件。在这个事件中,我们将工具栏从原来的停靠容器中移除,并在鼠标所在位置创建一个新的窗口作为工具栏的新容器。

以下是具体的实现代码:

public class FloatToolStrip : ToolStrip
{
    private Form _floatForm;

    protected override void OnMouseDown(MouseEventArgs e)
    {
        base.OnMouseDown(e);
        if (e.Button == MouseButtons.Left)
        {
            // 创建新的浮动窗口
            _floatForm = new Form();
            _floatForm.FormBorderStyle = FormBorderStyle.FixedToolWindow;
            _floatForm.ShowIcon = false;
            _floatForm.ShowInTaskbar = false;
            _floatForm.TopMost = true;
            _floatForm.Controls.Add(this);
            _floatForm.Size = this.Size;
            _floatForm.Location = this.PointToScreen(new Point(0, 0));
            _floatForm.Show();
            this.Parent.Controls.Remove(this);
        }
    }

    protected override void OnMouseUp(MouseEventArgs e)
    {
        base.OnMouseUp(e);
        if (_floatForm != null)
        {
            // 将工具栏重新拖回原位
            this.Parent.Controls.Add(this);
            _floatForm.Close();
            _floatForm = null;
        }
    }
}

推荐阅读
author-avatar
用户x735b8j5iu
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有