panel或图片什么的跟着鼠标走,这里panel自己可以加背景图或直接搞个图就行了。为了演示清楚,有个滚动条控件做对比,与自定义的同步。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms; namespace customscroll
{
public partial class Form1 : Form
{
int limt, set_x; //滚动位置最大值和固定的左右的位置
bool mouse_Press = false; //鼠标按下
bool mouse_Wheel = false; //滑轮是否滚动
Point mouseOff; //存放当前鼠标位置 public Form1()
{
InitializeComponent();
//向panel填充一堆内容
for (int i = 0; i < 25; i++)
{
Panel num_panel = new Panel();
Label num = new Label(); num.Text = i + ".";
num.ForeColor = Color.FromArgb(255, 255, 255);
num.Width = 30;
num.Dock = DockStyle.Left;
//设置鼠标滑轮事件,需将mouse_Wheel 值为true,在move里置,下面有,这里就不写了
//num.MouseWheel += new MouseEventHandler(OnMouseWheel); num_panel.Name = "Panel_" + i;
num_panel.Height = 35;
num_panel.Margin = new Padding(0, 0, 0, 0);
num_panel.BackColor = Color.SteelBlue;
num_panel.BorderStyle = BorderStyle.Fixed3D;
num_panel.Dock = DockStyle.Top;
num_panel.BorderStyle = System.Windows.Forms.BorderStyle.None;
num_panel.Controls.Add(num);
//设置鼠标滑轮事件,需将mouse_Wheel 值为true,在move里置,下面有,这里就不写了
//num_panel.MouseWheel += new MouseEventHandler(OnMouseWheel);
Content_panel.Controls.Add(num_panel); //将内容装入
//设置鼠标滑轮事件,需将mouse_Wheel 值为true,在move里置,下面有,这里就不写了
//Content_panel.MouseWheel += new MouseEventHandler(OnMouseWheel);
}
//装内容panel自动大小
Content_panel.AutoSize = true; set_x = ScrollHard_panel.Location.X; //固定左右位置为当前位置
limt = ScrollBar_panel.Height - ScrollHard_panel.Height; //滚动最大高度
ScrollHard_panel.Location = new Point(set_x,0) ; //先将位置设置到最顶
vScrollBar1.Maximum = limt; //放了个vScrollBar组件,演示用的,和自定义的同步 //鼠标滑轮事件
ScrollBar_panel.MouseWheel += new MouseEventHandler(OnMouseWheel);
ScrollHard_panel.MouseWheel += new MouseEventHandler(OnMouseWheel);
vScrollBar1.MouseWheel += new MouseEventHandler(OnMouseWheel);
} //鼠标滑轮事件
private void OnMouseWheel(object sender, System.Windows.Forms.MouseEventArgs e)
{
int set_y = 0; if (mouse_Wheel) //是否判断鼠标滑轮
{
if (e.Delta > 0) //滑轮向上
{
set_y = ScrollHard_panel.Location.Y - 10; //每次移动10
if (set_y < 0) { set_y = 0; } //超范围
}
if (e.Delta < 0) //滑轮向下
{
set_y = ScrollHard_panel.Location.Y + 10; //每次移动10
if (set_y > limt) { set_y = limt; } //超范围
}
ScrollHard_panel.Location = new Point(set_x, set_y); //滚动块的定位
vScrollBar1.Value = set_y; //演示用的滚动条,和自定义的同步 Content_panel.Top = -set_y; //装内容的panel滚动显示
} } //自定义滚动“块”框鼠标按下
private void ScrollHard_panel_MouseDown(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left) //鼠标左键
{
mouseOff.Y = e.Y; //取当前位置
mouse_Press = true; //鼠标按下
}
} //自定义滚动“块”鼠标放开
private void ScrollHard_panel_MouseUp(object sender, MouseEventArgs e)
{
mouse_Press = false; //鼠标放开
} //自定义滚动“块”鼠标离开范围
private void ScrollHard_panel_MouseLeave(object sender, EventArgs e)
{
mouse_Wheel = false; //滑轮不可用
} ////自定义滚动“块”鼠标在范围
private void ScrollHard_panel_MouseMove(object sender, MouseEventArgs e)
{
mouse_Wheel = true; //可以用滑轮
if (mouse_Press) //鼠标按下状态
{
int set_y = ScrollHard_panel.Top + e.Y - mouseOff.Y; //计算当前纵向坐标
if (set_y < 0) { set_y = 0; } //超范围
else if (set_y > limt) { set_y = limt; } //超范围
else { ScrollHard_panel.Location = new Point(set_x, set_y); } //滚动块的定位
vScrollBar1.Value = set_y; //演示的滚动条和自定义的同步
Content_panel.Top = -set_y; //装内容的panel滚动显示
}
} //在滚动“框”范围内
private void ScrollBar_panel_MouseMove(object sender, MouseEventArgs e)
{
mouse_Wheel = true; //可以使用滑轮
} //离开滚动“框”
private void ScrollBar_panel_MouseLeave(object sender, EventArgs e)
{
mouse_Wheel = false; //不可使用滑轮
} //自定义滚动“框”鼠标放开
private void ScrollBar_panel_MouseUp(object sender, MouseEventArgs e)
{
if (e.Button == MouseButtons.Left) //鼠标左键
{
int set_y = e.Y; //当前纵坐标
if (set_y > limt) { set_y = limt; } //超范围
ScrollHard_panel.Location = new Point(set_x, set_y); //滚动块定位
vScrollBar1.Value = set_y; //演示的滚动条,和自定义的同步
Content_panel.Top = -set_y;//装内容的panel滚动显示
mouse_Press = false; //鼠标为放开状态
}
} //演示用的vScrollBar1组件,也可以控制装内容的panel滚动显示
private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
Content_panel.Top = -vScrollBar1.Value;
}
}
}
本文转自:http://www.cnblogs.com/qiaoke/p/6120102.html

winfrom自定义滚动条的更多相关文章

  1. 初学c# -- 学习笔记(五) winfrom自定义滚动条

    找了些例子,要么庞大.要么搞个安装组件什么的,我要求能用就行了.实在找例子修改麻烦,就做了一个.其实实现挺简单,就是panel或图片什么的跟着鼠标走就行了. 这里panel自己可以加背景图或直接搞个图 ...

  2. CSS3自定义滚动条样式 -webkit-scrollbar(转)

    有没有觉得浏览器自带的原始滚动条很不美观,同时也有看到很多网站的自定义滚动条显得高端,就连chrome32.0开发板都抛弃了原始的滚动条,美观多了.那webkit浏览器是如何自定义滚动条的呢? 前言 ...

  3. jquery自定义滚动条 鼠标移入或滚轮时显示 鼠标离开或悬停超时时隐藏

    一.需求: 我需要做一个多媒体播放页面,左侧为播放列表,右侧为播放器.为了避免系统滚动条把列表和播放器隔断开,左侧列表的滚动条需要自定义,并且滚动停止和鼠标离开时要隐藏掉. 二.他山之石: 案例来自h ...

  4. 利用JS实现自定义滚动条

    一般默认的滚动条会比较丑,我们可以用简单的js实现自定义滚动条的功能: 代码如下: <!doctype html> <html> <head> <meta c ...

  5. javascript 学习之自定义滚动条加滚轮事件

    要自己写一个自定义滚动条加上滚轮事件,之前的没有滚轮事件不完整,今天整理了一个. 1.滚轮事件是不兼容的,firefox中是必需要用事件绑定的添加,用的DOMMouseScroll,当滚动鼠标的时候, ...

  6. 自定义滚动条 - mCustomScrollbar

    项目中需要使用自定义滚动条,但是试用了很多都功能不够全,今天发现一个比较全而且用法很简单的 -- mCustomScrollbar http://manos.malihu.gr/jquery-cust ...

  7. Flex:自定义滚动条样式/隐藏上下箭头

    Flex组件自定义滚动条的实现 .scrollBar{ downArrowUpSkin:Embed(source="img/mainLeftScrollBar/bar_bottom.png& ...

  8. javascript自定义滚动条插件,几行代码的事儿

    在实际项目中,经常由于浏览器自带的滚动条样式太戳,而且在各个浏览器中显示不一样,所以我们不得不去实现自定义的滚动条,今天我就用最少的代码实现了一个自定义滚动条,代码量区区只有几十行,使用起来也非常方便 ...

  9. jQuery自定义滚动条样式插件mCustomScrollbar

    如果你构建一个很有特色和创意的网页,那么肯定希望定义网页中的滚动条样式,这方面的 jQuery 插件比较不错的,有两个:jScrollPane 和 mCustomScrollbar. 关于 jScro ...

随机推荐

  1. hibernate id 策略

    @Id@GeneratedValue(generator = "paymentableGenerator")@GenericGenerator(name = "payme ...

  2. 二维码跳转不同的 app store

    说道二维码 之前是用来跳转app store  然后在就是出来的 扫码付款什么的 用的很平常,其实里面也很简单   自己刚开始接触的时候     同事说要做一个二维码下载 应用 => 我=懵逼 ...

  3. css3 动画的有关属性

    transform transform: none|transform-functions; transform 属性向元素应用 2D 或 3D 转换.该属性允许我们对元素进行旋转.缩放.移动或倾斜. ...

  4. node的核心模块path

    //导入模块path var path=require("path"); //path.basename :输出文件名+后缀 //console.log(path.basename ...

  5. 60阶单群同构于A5的证明

    设$G$是$60$阶的单群,我们来证明他同构于$A_5$,一个比较直观地思路是考虑群表示$\phi:G\to S(\Sigma)$,由同态基本定理得到$$G/{\rm Ker}\phi \simeq ...

  6. tp框架之自动验证表单

    tp框架的create自动加载表单的方法可以自动根据自己定义的要求来验证表单里面的内容,但是由于是在后台执行代码,会拖慢程序运行速度,所以还是建议通过前端js来进行判断,后台只进行数据库的查询以及传值 ...

  7. 用javascript设置和读取cookie的例子

    请看下面用javascript设置和读取cookie的简单例子,现在的问题是,如果要设置的是一个cookie集,比如在cookie1集中有uname,uid两组信息,应该如何写呢?cookie(&qu ...

  8. 【Java EE 学习 80 上】【WebService】

    一.WebService概述 什么是WebService,顾名思义,就是基于Web的服务,它使用Http方式接收和响应外部系统的某种请求,从而实现远程调用.WebService实际上就是依据某些标准, ...

  9. Oracle SQL的硬解析和软解析

    我们都知道在Oracle中每条SQL语句在执行之前都需要经过解析,这里面又分为软解析和硬解析.在Oracle中存在两种类型的SQL语句,一类为 DDL语句(数据定义语言),他们是从来不会共享使用的,也 ...

  10. 体验Visual Studio 2015 之 MVC - 视图组建

    VS2015 PERVIEW中可以创建MVC 项目. 我们可以 发现有几大亮点. 首先我们看目录结构: 当前项目包含两个主要的文件夹:Solution Items .src 很明显src文件夹下为当前 ...