Winfrom Panel Scroll End 的实现
场景:在一个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 的实现的更多相关文章
- winfrom Panel 问题
Panel 图片自适应 BackgroundImageLayout 设置成Zoom就行 Panel动态换图片时候的闪烁问题: 首先创建一个自己的panel类: using System; using ...
- js判断用户是否正在滚动滚动条,滚动条滚动是否停止
js智能判断是否可以自动滚动 比如,做一个音乐播放器,边播放,边定位歌词,播放的时候,需要自动定位到播放语句,但是用户去拖动或者滚动div(歌词面板)时,这时就必须停止自动滚动,或者说是不能自动滚动, ...
- JavaWeb项目开发案例精粹-第6章报价管理系统-07View层
1. 2.back_index.html <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT= ...
- 基于jQuery鼠标滚轮滑动到页面节点部分
基于jQuery鼠标滚轮滑动到页面节点部分.这是一款基于jQuery+CSS3实现的使用鼠标滚轮或者手势滑动到页面节点部分特效.效果图如下: 在线预览 源码下载 实现的代码. html代码: &l ...
- winfrom中将panel另存为图片
private void button1_Click(object sender, EventArgs e) { Point ScrollMaxInfo = Get ...
- Winfrom 设置Panel添加滚动条
AutoScroll是自动滚动的属性. 把AutoScroll设置为True;
- Bootstrap~Panel和Table
回到目录 在我们对一个页面进行设计时,分块是必须的,没有一个网站是一栏而下的,除非你是在看小说,否则你的页面设计一定是分块的,即它由于多个panel组件,在bootstrap里叫到栅格系统,而在每行每 ...
- NGUI Scroll List
NGUI Scroll List 1.Add GameObject with Script UI Panel(NGUI -> UI -> NGUI Panel) and Script UI ...
- NGUI之scroll view制作,以及踩的坑总结
http://blog.csdn.net/monzart7an/article/details/23878505 链接: http://game.ceeger.com/forum/read.php?t ...
随机推荐
- zabbix日常监控项web(八)
存在一种情况:nginx或者httpd服务本身运行正常,但是网页挂了,类似于网页被黑,或者40X之类的...:可以用zabbix把web页面访问也监控起来,第一时间得知web崩溃信息并做相应处理. 被 ...
- September 16th 2017 Week 37th Saturday
We are all in the gutter, but some of us are looking at the stars. 身处艰难,但仍有人仰望星空. When standing on t ...
- 第二次作业 APP分析
第一部分 调研, 评测 1.下载软件并使用. 今天我要分析的软件app是UC浏览器这个软件,UC浏览器的用户群体还是挺多的,作为一款主流之一的浏览器APP,整体的用户体验还是很好的.简洁的界面还有中间 ...
- golang-gorm框架支持mysql json类型
gorm框架目前不支持Json类型的数据结构 http://gorm.book.jasperxu.com/callbacks.html 如在Mysql中定义了如下的表结构 CREATE TABLE ` ...
- python自动化之上传文件的3种方法和图片预览
ajax上传文件的三种方法 第一种xhr提交 function xhrSubmit(){ // $('#fafafa')[0] var file_obj = document.getElementBy ...
- C语言偏冷知识点汇总
1.C语言函数声明中参数类型写在右括号后是什么意思?如下代码所示: int add(a, b) int a; int b; { return a + b; } 像这样的声明是什么意思,我测试过在gcc ...
- jdbc 和oracle数据库 建立连接
package jdbc; import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException; ...
- gulp插件(8) - gulp-sourcemaps(生成sourcemap)
功能描述生成sourcemap文件(什么是sourcemap?请参考,简单讲就是文件压缩后不利于查看与调试,但是有了sourcemap,出错的时候,除错工具将直接显示原始代码,而不是转换后的代码) 插 ...
- 矩阵求逆·学习笔记 $\times$ [$LuoguP4783$]矩阵求逆
哦?今天在\(luogu\)上fa♂现了矩阵求逆的板子--于是就切了切. 那么我们考虑一个矩阵\(A\),它的逆矩阵记作\(A^{-1}\),其中对于矩阵这个群来讲,会有\(A \cdot A^{-1 ...
- C语言程序设计I—第十二周教学
第十二周教学总结(19/11-25/11) 教学内容 第4章 循环结构 4.5 循环结构程序设计 课前准备 在蓝墨云班课发布资源: PTA:2018秋第十二周作业4.5 分享码:B7FA52A13B6 ...