# MindMapUserControlForWinForm **Repository Path**: lanicon/MindMapUserControlForWinForm ## Basic Information - **Project Name**: MindMapUserControlForWinForm - **Description**: 这是一个可供Winform使用的思维导图的自定义控件 This is a user control of MindMap for C# WinForm - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2020-11-14 - **Last Updated**: 2021-09-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 这是一个可供Winform使用的思维导图的自定义控件 This is a user control of MindMap for C# WinForm 它允许你在Winform程序上集成思维导图,就像使用普通自定义控件一样。它并不依赖任何第三方DLL或控件库。你只需要引用WlxMindMap.dll就可以在窗口设计器中直接拖入到你的程序中。 其开发该控件的初衷是用来选择代替TreeView控件,让用户通过思维导图的方式来选择节点,进而提升用户体验,它允许你编辑节点/添加节点/删除节点。 ## 控件拥有一些非常棒的功能例如: 1. 使用右键或中键拖拽来调整导图的位置 2. 允许用户通过按住Ctrl+鼠标滚轮对思维导图进行缩放 3. 允许左键拖动出矩形框来选择节点,或按住Control单击节点来进行多选 4. 允许用户通过代码或点击折叠按钮来折叠节点 5. 允许用户从一个节点左键拖拽到另一个节点触发事件(不允许拖动到子节点) ## 代码中附带了一个Demo程序来示例如何使用思维导图 ![Image text](https://raw.githubusercontent.com/a1174236686/MindMapUserControlForWinForm/master/ReadmeImg/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20181219152530.png) ###### 我自己使用的界面 ![]() ###### 演示使用思维导图来建立文件夹结构以及缩放功能 ![]() ###### 演示删除文件夹以及拖拽功能 ![]() ###### 演示快捷打开指定文件以及目录 1. Demo是一个文件夹结构查看器。用于查看文件夹的结构。 2. 直接打开默认会打开D盘的结构(有可能你D盘的文件夹非常多导致很卡) 3. 之后你就可以在资源管理器中点击右键选择“用思维导图打开”,来查看文件夹的结构 ### 并且你对文件夹进行一些操作 1. 按下tab键来创建子文件夹 2. 按下enter键来创建同级文件夹 3. 按下delete键来删除文件夹 4. 按下空格来编辑文件夹名称 5. 左键拖拽文件夹来移动(剪切)文件夹 ## 思维导图共包含3个模块 ### 1、MindMap_Panel(思维导图容器) #### 是思维导图的本体可以直接在窗体设计器里将该控件直接拖动到窗体上,并且负责了以下任务: 1. 右键拖拽节点时移动思维导图的位置 2. 左键拖动鼠标时绘制矩形框来选中节点 3. 向用户提供一些事件和方法供用户使用代码操作如:绑定数据、获取选中节点、设置缩放比例等 ### 2、MindMapNodeContainer(节点容器) #### 每一个节点都有一个单独的节点容器,但本身是不具备节点内容的,他负责处理当前节点和子节点的关系。如: 1. 绘制当前节点与子节点之间的连接线(目前只有向右边延伸的,日后维护如果要加向其他地方延伸也只需要改节点容器就好了) 2. 添加子节点或删除子节点 3. 负责折叠或展开子节点 4. 计算节点尺寸 ### 3、MindMapNodeContent(节点内容) #### 这个类是一个抽象类,用户只需要继承它并实现里面的方法就可以进行自定义布局。比如: 1. 一个思维导图中其中一个节点为文本,另一个节点里有表格,在另外一个节点里有按钮等不一样的节点内容这是允许的,前提是你需要实现MindMapNodeContent并将他赋值给节点容器即可 2. 目前作者只提供了一个Text_MindMapNodeContent这一个节点布局 3. 如果你实现了一个节点内容布局,只需要在思维导图容器()的SetDataSource方法的泛型中填写你实现了本类的布局。就可以以你所写的布局来绑定数据源 ## 已知问题 基于自定义控件实现的,在进行大面积绘制时特别的慢,所以采用将Visible=false来跳过绘制过程。。所以会出现闪烁 ###### 如果你知道如何解决欢迎Fork这个项目并贡献你的代码,或致电我的邮箱或者870856195@qq.com ## 开源程序转载时请注明出处 ##### E-mail:870856195@qq.com ##### QQ:870856195 ##### wechat:a870856195 [![ 996.icu ](https://img.shields.io/badge/link-996.icu-red.svg)](https://996.icu)