winform 判断控件有没有被遮挡_C# Winform自定义侧边导航栏

微软winform控件中没有侧边导航栏,但这种导航栏在很多类型的项目中都需要,一些收费第三方控件库有相应的实现控件,如DotNetBar2,重点是收费,样式也老套。

如何实现自己的导航栏呢?

如何让自己的导航栏支持在设计时的编辑和事件响应呢?

eccb126a117ee15462a52bfa87abc77b.gif

支持设计时展开、折叠

实现自定义导航栏

前置条件:GDI+

  1. 新增加一个自定义类从TreeView继承
  2. 处理TreeView的DrawNode事件,这里是关键,可以判断是哪一级节点,然后绘制不同的样式
  3. 根据节点级别,综合焦点、展开与否等条件绘制节点。绘制就是DrawString等。
  4. 处理NodeMouseClick事件,控制节点的展开及收起。

https://github.com/wuqinchao/JwControls/blob/master/Jw.Winform.Ctrls/JwNavBar/JwNavBar.cs

在设计时设置节点

  1. 新增加一个自定义设计器类,从ControlDesigner继承
  2. 在设计器类中增加我们自己的DesignerVerb,需要取个名称,对应一个点击事件处理方法
  3. 在DesignerVerb的事件处理方法中,我们可以通过this.Control获取到当前的TreeView, 也就可以拿到所有节点了。将节点交给下一步的对话框,处理完成后更新节点。
  4. 新建一个对话框窗口,同样放一个TreeView,接收到的节点放入这个控件,通过按钮增加、删除、修改节点,完成时返回编辑好的节点。
948a7fadee88744cd5e33af89fd4a8e5.png

节点编辑对话框

https://github.com/wuqinchao/JwControls/blob/master/Jw.Winform.Ctrls/JwNavbar/JwNavbarDesigner.cs

在设计时如何控制响应节点展开及收起

控制节点展开及收起同样在设计器类中实现

  1. 增加一个自定义Behavior,从Behavior继承,重写OnMouseDown和OnMouseUp方法,检查判断鼠标点击事件,并调用控件Collapse和Expand实现折叠和展开。
  2. 增加自定义Glyph,从Glyph继承,构造时指定我们自定义的Behavior, 使我们能接收和响应鼠标事件。
  3. override设计器的GetGlyphs方法, 这个方法可以通过ISelectionService接口增加我们自定义的Glyph

设计时支持比较繁琐,中文资料也很少,大家共同学习。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值