C# Winform 自定义控件——竖着的Navbar

本文介绍如何在C# Winform应用中创建一个竖直布局的Navbar控件,详细阐述了实现效果、设计思路,并提供了相关代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果:

描述:

这是一个可折叠的菜单导航,主要是由panel、picturebox、label完成,界面的颜色用来区分一下各个组合控件,便于调试。
首先,首先是ImageButton:
这个是由PictureBox和Label构成。
1.文字部分的居中需要设置label的宽度为父容器的宽度。
2.图片设置 picBox.SizeMode = PictureBoxSizeMode.StretchImage
 
然后是单个的菜单 命名为:ButtonGroup:
顶部灰色的是一个label,绿色里面的是一个包含ImageButton的列表。
1.顶部这个label注册了一个click事件,是为了完成点击它的时候会展开。
 
最后是整个的菜单,就是由ButtonGroup组成的一个list,我给它命名为:CustomNavBar。
 
这里需要注意的是:
事件的封装,像这种自定义控件,都是要定义自定义事件,并且把它暴露出来,元控件触发的时候,才触发这个暴露出来的控件。代码类似这种:
private void PicBoxClick(object sender,EventArgs args)
{
PictureBoxClick?.Invoke(sender, this.text);
}
PicBoxClick是PictureBox控件的原生Click事件,PictureBoxClick是我们自己定义的事件,这个事件需要到控件外部注册,就像这样:
for (int i = 0; i < _listImageButton.Count; i++)
{
var imgButton = _listImageButton[i];
 
imgButton.Top = i * imgButton.Height;
imgButton.Left = 0;
 
imgButton.PictureBoxClick += ImgButton_PictureBoxClick;
 
ButtonArea.Controls.Add(imgButton);
}
这段代码中,_listImageButton是属于ButtonGroup控件里的集合,这样做,最终点击PictureBox的时候,其实是调用ImgButton_PictureBoxClick这个方法里的内容。
假如这个ButtonGroup已经是最外层的自定义控件了,那么这个ImgButton_PictureBoxClick就属于供这个完整的自定义控件使用人也就是客户自己自定义的事件了,这个里面的代码就可以根据不同的客户,内容就可以不同了。
因为这个控件最外层的自定义控件是CustomNavBar,所以在CustomNavbar里还自定义了一个相同委托的事件:
public delegate void ImageButtonClick(object o,string moduleName);
public event ImageButtonClick NavButtonClick;
 
 
这代码也是我从其他地方下载的,然后自己看了一篇,在自己敲的。敲的过程中,了解到了内部类的使用,最大的收获是:一般窗体都是要有partial修饰的,而InitializeComponent()方法都是放在自动生成的代码里的,做这个控件的时候,我还是自己第一次这样通过写代码的方式来初始化一个控件。

代码:

public partial class CustomNavBar : UserControl
    {
        public CustomNavBar()
        {
            InitializeComponent();
            InitializeButtonGroup();
            pnlMain.BackColor = Color.DarkOliveGreen;
            ResetMenu();
        }
        private string _jsonString;
        /// <summary>
        ///暴露接口,可从外部(数据库)获得菜单的信息
        /// </summary>
        public s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值