WinfromPanelScrollEnd的实现

作者:网络    软件教程库   2020-05-23

场景:在一个panel里面有非常多的自定义绘制的控件,在拖拉滚动条的时候,控件的画面上有残影

不知道大家遇到过这种情况没,一直做web的winform经验太少,有更好的解决办法请贡献

首先放出我的解决思路:需要再滚动停止的时候重绘一下控件,panel的所有事件都加了一个打印输出,发现,滚动条在滚动的时候只有一个scrol事件,是在滚动时候产生的,问题在于轻轻拖动滚动条,就会一瞬间产生n个scrol,如果直接这个事件里面放重绘代码,太消耗资源,第二这个滚动条除了滚动事件,别的事件都没有,比如鼠标moseup mosedown等

实在没有办法,写了一个类变现的实现滚动停止的时候执行自己的方法,代码如下,写的不好,抛砖引玉,希望能有更好的解决方式

using system;
using system.collections.generic;
using system.linq;
using system.text;
using system.threading;

namespace controller
{
    public delegate void voidnotify();
    /// summary
    /// 滚动停止事件
    /// /summary
    public class scrollend
    {
        private static scrollend instance;
        private static object lock = new object();
        /// summary
        /// 滚动条事件计数
        /// /summary
        private static int count = 0;
        /// summary
        /// thread loop 计数器
        /// /summary
        private static int count2 = 0;

        /// summary
        /// 通知自定义事件
        /// /summary
        public static voidnotify notify { get; set; }

        private thread thread = null;

        private scrollend()
        {

        }
        public static scrollend getinstance()
        {
            if (instance == null)
            {
                lock (lock)
                {
                    if (instance == null)
                    {
                        instance = new scrollend();
                    }
                }
            }
            return instance;
        }

        /// summary
        /// 滚动条事件触发add
        /// /summary
        public void add()
        {
            lock (lock)
            {
                if (count2 == 0)
                {
                    thread = new thread(new threadstart(run));
                    thread.isbackground = true;
                    thread.start();
                }
                else
                {
                    count++;
                }
            }
        }

        /// summary
        /// 通过thread的间隔计数跟滚动事件的计数对比,判断滚动结束,然后执行自定义事件
        /// /summary
        private void run()
        {
            while (true)
            {
                if (count2  count)
                {
                    break;
                }
                count2++;
                thread.sleep(30);
            }
            if (notify!=null)
            {
                notify();
            }
            count = 0;
            count2 = 0;
            thread = null;
            return;
        }
    }
}

  

winfrom panel scroll end 的实现

原文地址:http://www.cnblogs.com/zhaojingjing/p/4481295.html

软件教程库 原文链接:https://www.itjcku.com/9999/1091583.html

阅读全部内容


Tags:实现

返回首页



推荐内容

LinkedList和ArrayList的区别/何时使用LinkedList和ArrayList

看过葛一鸣写的《java程序性能优化:让你的java程序更快、更稳定》,里面介绍的是查询:3种遍历中除了for(int ...

windows脚本调用批处理

set ws=wscript.createobject(wscript.shell)ws.run batchfn.bat ...

WPF:依赖属性的数据绑定

one of the strengths of wpf is its data binding capabilities ...

hamlscss转换编写htmlcss的前期工作

http://www.w3cplus.com/sassguide/install.html 先下载ruby $ gem ...

解析this.initialize.apply(this,arguments)

摘自:http://www.cnblogs.com/uedt/archive/2010/06/24/1764561.ht ...

FU-A分包方式,以及从RTP包里面得到H.264数据和AAC数据的方法

fu-a分包方式,以及从rtp包里面得到h.264数据和aac数据的方法 rfc3984是h.264的baseline码 ...

java面试题之ssh

1、写出你熟悉的开源框架以及各自的作用(项目中为什么使用ssh) 答:框架:hibernate,spring,strut ...

JDBC连接数据库的过程

以连接mysql为例: (1)加载mysql数据库连接的驱动程序。到mysql官网下载该驱动程序jar包,然后把包复制到 ...

ORACLEno1存储过程插入更新表数据

create or replace procedure sp_cust_main_data_yx(instrdate i ...

win使用telnet到ubuntu下vim显示中文为乱码的解决方法~

1.几个路径: ubuntu: /etc/default/locale 相当于 centos:/etc/sysconfi ...

mediawiki的安装与配置

apache的配置: 1. 开启php module 查看mods-enabled/php5.load 是否存在,不存在 ...

C#随机数

c#中有个random类可以非常方便的产生一个随机数,但是在使用中你会发现这个类并不是特别好用,偶尔会一直提供同一 ...

shell-入门

dos2unix start.sh 在windows系统下编写的shell脚本 在liunx下进行一次转译,否则会爆出 ...

团队开发——软件需求分析报告(HelloWorld团队)

一.项目名称超级迷宫二.设计背景随着生活节奏加快,游戏更新速度的加快,游戏大同小异缺少新颖度,同时为了满足多游戏的结合, ...

MSSQl事务的使用

注册了博客这么久没还好好写过文章呢?昨天看了我同学的博客,写的很好,每次用到以前的知识我就会去看看她写的博客,现在 ...

NSDictionary转化为NSData

之前自己写了nsdictionary转化为nsdata的一种方法如下 nsmutabledata *data = ...

nginx关键字

反向代理: proxy_pass: 负载均衡: upstream 负载均衡,有四种方式:     a/ 轮询 ...

Java设计模式之简单工厂模式

设计模式之简单工厂举例: l简单工厂模式概述 又叫静态工厂方法模式,它定义一个具体的工厂类负责创建一些类的实例 l优点 ...

解题报告之POJ3686TheWindy's

解题报告 之 poj3686 the windy‘s description the windy‘s i ...

【ThinkingInJava】18、关于java中的闭包与回调

/** * 书本:《thinking in java》 * 功能:关于java中的闭包与回调,这里回调区别于c++,c+ ...

TreasureHunting (hdu3468二分匹配+bfs最短路径)

treasure hunting time limit: 4000/2000 ms (java/others)mem ...

【ThinkingInJava】19、控制框架的实现

/** * 书本:《thinking in java》 * 功能:控制框架的实现 * 文件:event.java * 时 ...

【ThinkingInJava】20、控制框架的使用(初始化系统使用)

/** * 书本:《thinking in java》 * 功能:控制框架的实现,1、控制框架的完整实现是由单个的类创建 ...

最小汉密尔顿回路问题状态压缩dp

给定n个顶点做成的图,要求从顶点0出发经过所有点一次然后回到0点的一条权#20540;之和最小的一条路的权#20540; ...

POJ1966.CableTVNetwork——无向图的点连通度

http://poj.org/problemid=1966 题目描述: 有线电视网络中,中继器的连接是双向的。如果网 ...

Oracle备忘录1

数据库管理员:安装升级oracle数据库建库,表空间,表,视图,索引。。。制定并实施备份和修复计划数据库权限管理,调优, ...

FileStream文件流

使用文件流拷贝一个较大的多媒体文件: public static void copyfile(string soucr ...

C语言BFS(5)___TT与魔法师(swustoj2464)

description tt生活在一个充满魔法的国度,为了便于管理,国王请魔法师在一些重要的城市之间造出 ...

进程类Process与多线程Thread

进程类(process)的基本操作: //通过进程类查询系统所有进程 process[] pr ...

Xml解析方式之Pull解析器的使用

xml有多种解析的方式,这篇文章只介绍用pull解析器来解析xml文件,接下来我会说明使用pull解析器来读取xml文件 ...


本网站部分内容来自互联网,版权归原作者所有,文章内容仅代表原作者个人观点。如有侵权请联系我们删除 电子邮件 itjcku@foxmail.com