vs 自绘控件--自绘多按钮控件

为解决大量按钮重绘导致的延迟问题,本文介绍了一种自定义控件的方法,通过在面板上直接绘制多按钮并实现点击响应。通过使用System.Drawing.Graphics,创建自定义事件来响应单个按钮的点击,提高了界面刷新速度。
摘要由CSDN通过智能技术生成

最近的项目开发中,同事开发界面时遇到了这样的问题。在一个容器内要同时显示50+的按钮。使用vs控件开发的效果是按钮刷新较慢,肉眼观察有明显的延迟。一开始,想通过在容器内控制控件的重绘来加快刷新速度,未能实现。分析主要原因是,按钮重绘的延迟是因为系统逐个调用了每个按钮的重绘,而这一过程可能涉及到了按钮的其他一些操作,导致整体重绘速度降低。由于知识所限,目前在控件内无法提高刷新速度。经询问,决定使用自定义控件。思路是:在面板上自绘多按钮,并实现其点击响应。绘图部分应用System.Drawing.Graphics的支持,通过自定义事件的引发和响应实现对单个按钮的点击响应。

部分代码如下:

 


{
    public partial class UserControl1 : UserControl //自定义控件类
    {
        #region Members
        private int rowNo = 4; //Button的行数
        private int colNo = 4;//Button的列数
        private int bHeight = 30;//按钮的高
        private int bWidth = 20;//按钮的宽
        private int bBorder = 1;//按钮的边界宽度
        private Size iSize =new Size(120,80);//控件大小

        private String[][] title = null;//每个按钮的文本内容
        private MyButton[][] _buttons = null;//自定义MyButton类的数组,用于引发事件

        //记录鼠标按下的位置。行列,XY

        private int lastR = 4;
        private int lastC = 4;
        private int lastX = 0;
        private int lastY = 0;

        //自定义事件成员

        public event MyButtonEventHandle MyButtonEventHandle;
        #endregion

        #region Properties
        [Description("The no. of rows"),Browsable(true),DisplayName("Row No."),Category("Settings of Button")]
        public int RowNo
        {
            get { return rowNo; }
            set {
                if (value > 1)rowNo = value;
                ButtonHeight = (this.Height-2) / rowNo;
            }
        }

        [Description("The no. of columns"), Browsable(true), DisplayName("Col. No."), Category("Settings of Button")]
        public int ColNo
        {
            get { return colNo; }
            set {
                if (value > 1)colNo = value;
                ButtonWidth = (this.Width-2) / colNo;
            }
        }

        [Description("height of button"), Browsable(true), DisplayName("ButtomHeight"), Category("Settings of Button")]
        public int ButtonHeight
        {
            get { return bHeight; }
            set {
                if (value > 1)bHeight = value;
                if (ButtonHeight * RowNo+2 != Size.Height)
                {
                    this.Height = ButtonHeight * RowNo+2;
                    this.Size = new Size(this.Size.Width, ButtonHeight * RowNo+2);
                }
            }
        }

        [Description("Width of button"), Browsable(true), DisplayName("ButtomWidth"), Category("Settings of Button")]
        public int ButtonWidth
        {
            get { return bWidth; }
            set {
                if (value > 1)bWidth = value;
                if (ButtonWidth * ColNo+2 !

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值