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. ScriptedSandbox64.exe 在写Winform程序Debug时不停提交数据

    抓包时发现不停的在提交数据,导致抓包内容看不到. 取消方式:Tools -> Options -> Debugging -> General -> Enable Diagnos ...

  2. Mongodb 基础(Z)

    Mongodb的客户端支持 作为一款非常成熟NoSQL数据库,Mongdb对各种编程语言的支持已经非常完善了,目前已经支持各大主流编程语言包括:1,mongo shell 2,Python 3,Jav ...

  3. Application package 'AndroidManifest.xml' must have a minimum of 2 segments.

    看了源码就是packagename里面必须包含一个. 源码在: ./sdk/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/id ...

  4. Sublime 3 如何配置SVN插件

    在sublime里面安装svn的插件,就可以在sublime的操作界面里面进行相关svn操作,这样就不用再回到文件系统中,进行相关svn的操作. 1.在进入sublime界面后,点击顶部菜单“Pref ...

  5. javascript的一些知识

    一.Js的this,{},[] this是Javascript语言的一个关键字,随着函数使用场合的不同,this的值会发生变化.但是有一个总的原则,那就是this指的是调用的函数自己. { } 大括号 ...

  6. Mac系统下开启和关闭隐藏文件的方法

    在Mac下找到终端,输入以下命令(注意区分大小写): 显示Mac隐藏文件的命令: defaults write com.apple.finder AppleShowAllFiles -bool tru ...

  7. TCP/IP协议三次握手与四次握手流程解析

    原文链接地址:http://www.2cto.com/net/201310/251896.html TCP/IP协议三次握手与四次握手流程解析 TCP/IP协议的详细信息参看<TCP/IP协议详 ...

  8. Tomcat绑定IPV4端口

    使用下面的方法可以绑定到IPV4, 在<tomcat>/bin目录下新建setenv.sh,如果没有话,然后添加如下内容: JAVA_OPTS="$JAVA_OPTS -Djav ...

  9. mybatis 配置连接池

    <!-- 配置数据源 --> <bean id="dataSource" class="com.alibaba.druid.pool.DruidData ...

  10. hdu 5384 Danganronpa

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5384 思路:没学自动机时以为是道KMP然后就tle了好几把,AC自动机模板题 #include<cs ...