首页 > 其他 > 详细

xamarin studio 中SpinButton ComBox Splid 鼠标放上去就会自动接收焦点,然后进行数值变化

时间:2014-06-23 00:59:56      阅读:617      评论:0      收藏:0      [点我收藏+]

公司做跨平台项目,用XamarinStudio 开发mac版本,语法还是C#,但是,尼玛XamarinStudio的控件就是坑爹啊。

其他的暂时不累赘,笔者画界面,一堆控件放到一个界面上,当超出屏幕时候,会出现竖直滚动条,当你鼠标想中键滚动时,悲剧来了,尼玛,鼠标放在一个SpinButton时候,它的值自动开始滚动,我屮艸芔茻

来来来,重写。

 [System.ComponentModel.ToolboxItem(true)]
    public class SpinButtonEx : Gtk.SpinButton
    {
        bool isPress = false;
        public SpinButtonEx(double min = int.MinValue, double max = int.MaxValue, double step = 1)
            : base(min, max, step)
        {
            this.Numeric = false;
        }

        protected override void OnFocusGrabbed()
        {
            if (isPress) this.CanFocus = true;
            else this.CanFocus = false;
            base.OnFocusGrabbed();
        }

        protected override bool OnScrollEvent(Gdk.EventScroll evnt)
        {
            if (!this.IsFocus) return false;
            return base.OnScrollEvent(evnt);
        }

        protected override bool OnButtonPressEvent(Gdk.EventButton evnt)
        {
            if (evnt.Button == 1) isPress = true;
            return base.OnButtonPressEvent(evnt);
        }

        protected override bool OnFocusOutEvent(Gdk.EventFocus evnt)
        {
            isPress = false;
            return base.OnFocusOutEvent(evnt);
        }

基本思路是这样的,当这个控件获得焦点后,才会改变数值,没有获得焦点,弃之。

OnFocusGrabbed()是一个很蛋疼的函数,它会自动捕捉鼠标焦点,然后出发Scroll滚动,而且Gdk里传的是handle,这个handle甚至你没有办法去new一个,连改写都很难,更烦躁的是这个事件属于触发式,接收根本不会出发ValueChanged事件,那我只有屏蔽了,加上一个临时变量isPress来进行暂存,判断是否是鼠标点击后获得焦点,如果没有鼠标点击,抱歉,我会置之不理。

 

xamarin studio 中SpinButton ComBox Splid 鼠标放上去就会自动接收焦点,然后进行数值变化,布布扣,bubuko.com

xamarin studio 中SpinButton ComBox Splid 鼠标放上去就会自动接收焦点,然后进行数值变化

原文:http://www.cnblogs.com/fish124423/p/3799800.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!