自定义控件的相关操作,长按按钮操作

来源:互联网 发布:手机上怎么修改mac地址 编辑:程序博客网 时间:2024/06/05 02:26

描述:创建一个自定义控件名为“Long Push Button”,控件中含有一个按钮,一个进度条。在自定义控件中添加“xActivateTime”属性,这个属性作为变量用于决定自定义控件中按钮需要长按多少秒,主窗口才会收到这个事件的触发。进度条用于展示当前的进度。

主体窗口的触发条件有两个,按钮按下时间超过规定的和鼠标up,也就是说当按钮按下的时间超过规定的,事件不会被触发,直到鼠标松开才会触发

实现这个功能需要用到以下几个自定义控件的操作:1. 添加自定义控件,并向自定义控件添加属性。2. 向自定义控件添加事件

1. 自定义控件的添加

在solution处右键——Add——User Control,写好控件名称点击确认即可添加成功

在弹出的窗口中,可以放置按钮和进度条(process bar)


2. 向自定义控件添加属性

进入到 Long_Push_Button类,在构造函数下的空白处右键——insert Snippey——visual C#——prop

更改弹出的代码,rebuild以后能够在调用自定义控件的Form中看到xActivateTime属性

_xActivateTime默认值设置为3,可以在属性窗口更改这个值

        private short _xActivateTime = 3;        public short  xActivateTime         {            get { return _xActivateTime ;}            set { _xActivateTime =value ;}        }

3.  实现长按xActivateTime秒后,事件才开始发生
这里使用timer控件计时,所以在自定义控件中需要添加一个Timer控件
     1)鼠标按下事件,初始化,计时开始,时间间隔设置0.1秒 
        private void btn_Action_MouseDown(object sender, MouseEventArgs e)        {            progressBar1.Maximum = Convert.ToInt32(_xActivateTime) * 100;            progressBar1.Value = 0;            count = 0;            this.timer1.Interval = 100;            this.timer1.Start();        }


      2)鼠标放开事件,计时停止,判断时间是否到了,若到则触发UserControlBtnClicked(sender, new EventArgs())事件
        private void btn_Action_MouseUp(object sender, MouseEventArgs e)        {            this.timer1.Stop();            if (progressBar1.Value == progressBar1.Maximum)            {                UserControlBtnClicked(sender, new EventArgs());            }            else             {                UserControlMouseUp(sender, new EventArgs());                progressBar1.Value = 0;            }        }

        3)计时器触发事件,让进度条的值不断增长

        private void timer1_Tick(object sender, EventArgs e)        {                       if (progressBar1.Value + count + 1 >= progressBar1.Maximum)            {                progressBar1.Value = progressBar1.Maximum;                this.timer1.Stop();                count = 0;            }            else             {                count++;                progressBar1.Value = count * 10;            }        }

4. 向自定义控件中添加事件

        public delegate void BtnClickHandle(object sender, EventArgs e);        public event BtnClickHandle UserControlBtnClicked; //声明事件        public delegate void MouseUpHandle(object sender, EventArgs e);        public event MouseUpHandle UserControlMouseUp;

这里添加了两个自定义事件,一个用于长按时间满足要求主窗体触发的事件,另一个用于时间不足够的情况

此时,在主窗体点击自定义控件,在事件窗口就可以看到这两个事件了

分别双击这两个事件,在Form类中会添加两个方法

        private void long_Push_Button1_UserControlBtnClicked(object sender, EventArgs e)        {            textBox1.Text = long_Push_Button1.xActivateTime + "Sec";        }        private void long_Push_Button1_UserControlMouseUp(object sender, EventArgs e)        {            textBox1.Text = "";        }

时间满足,在Textbox中显示长按的秒数,若不满足则什么都不显示


5. 结果



原创粉丝点击