场景:在一个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 的实现的更多相关文章

  1. winfrom Panel 问题

    Panel 图片自适应 BackgroundImageLayout 设置成Zoom就行 Panel动态换图片时候的闪烁问题: 首先创建一个自己的panel类: using System; using ...

  2. js判断用户是否正在滚动滚动条,滚动条滚动是否停止

    js智能判断是否可以自动滚动 比如,做一个音乐播放器,边播放,边定位歌词,播放的时候,需要自动定位到播放语句,但是用户去拖动或者滚动div(歌词面板)时,这时就必须停止自动滚动,或者说是不能自动滚动, ...

  3. JavaWeb项目开发案例精粹-第6章报价管理系统-07View层

    1. 2.back_index.html <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT= ...

  4. 基于jQuery鼠标滚轮滑动到页面节点部分

    基于jQuery鼠标滚轮滑动到页面节点部分.这是一款基于jQuery+CSS3实现的使用鼠标滚轮或者手势滑动到页面节点部分特效.效果图如下: 在线预览   源码下载 实现的代码. html代码: &l ...

  5. winfrom中将panel另存为图片

    private void button1_Click(object sender, EventArgs e)        {            Point ScrollMaxInfo = Get ...

  6. Winfrom 设置Panel添加滚动条

    AutoScroll是自动滚动的属性. 把AutoScroll设置为True;

  7. Bootstrap~Panel和Table

    回到目录 在我们对一个页面进行设计时,分块是必须的,没有一个网站是一栏而下的,除非你是在看小说,否则你的页面设计一定是分块的,即它由于多个panel组件,在bootstrap里叫到栅格系统,而在每行每 ...

  8. NGUI Scroll List

    NGUI Scroll List 1.Add GameObject with Script UI Panel(NGUI -> UI -> NGUI Panel) and Script UI ...

  9. NGUI之scroll view制作,以及踩的坑总结

    http://blog.csdn.net/monzart7an/article/details/23878505 链接: http://game.ceeger.com/forum/read.php?t ...

随机推荐

  1. 构造个人轻量级XSS平台获取管理员cookie并登录

    一.前言 本平台是个人轻量级XSS测试平台,仅作为练习参考. 二.实验环境 服务器操作系统:Centos 7 Web容器:Apache 三.平台搭建过程 安装Apache 安装PHP 安装Git工具 ...

  2. 开发一个shopify插件

       开发一个shopify插件,shopify商城可以安装该插件:当用户在商城下单后,插件把订单数据按照指定格式传给disruptsports服务器:   https://help.shopify. ...

  3. codeforces 1007B Pave the Parallelepiped

    codeforces 1007B Pave the Parallelepiped 题意 题解 代码 #include<bits/stdc++.h> using namespace std; ...

  4. 面向对象程序设计_Task4_Calculator1.1

    The 2nd part of the Calculator program 题目链接:Click Here github链接:Click Here 诶嘿,第二部分,要开始实现计算的功能了,估计离不是 ...

  5. 给 Virtualbox 中 Ubuntu 系统设置静态 IP

    虚拟机网络选择 桥接网卡 模式. 主要涉及两个步骤: 1. 修改 /etc/network/interfaces 文件: 2. 修改 dns : 第一步,修改 interfaces 文件: sudo ...

  6. 问题:win10防火墙不能自动启动

    问题:win10防火墙不能自动启动 描述:Windows防火墙不能自动启动,每次开机要手动启动,打开service.msc,里面防火墙的启动类型为手动,按钮为灰色,不能更改为自动,怎么办? 解决方法: ...

  7. 2243. [SDOI2011]染色【树链剖分】

    Description 给定一棵有n个节点的无根树和m个操作,操作有2类: 1.将节点a到节点b路径上所有点都染成颜色c: 2.询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如 ...

  8. 1877. [SDOI2009]晨跑【费用流】

    Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他 坚持下来的只有晨跑. 现在给出一张学校附近的地图,这张地图中包含N个 ...

  9. Day5 JDBC

    JDBC的简介 Java  Database Connectivity:连接数据库技术. SUN公司为了简化.统一对数据库的操作,定义了一套Java操作数据库的规范(接口),使用同一套程序操作不同的数 ...

  10. Python之django自带的分页功能

    前端页面: <div class="col-sm-6"> <div class="dataTables_paginate paging_simple_n ...