winfrom自定义滚动条
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自定义滚动条的更多相关文章
- 初学c# -- 学习笔记(五) winfrom自定义滚动条
找了些例子,要么庞大.要么搞个安装组件什么的,我要求能用就行了.实在找例子修改麻烦,就做了一个.其实实现挺简单,就是panel或图片什么的跟着鼠标走就行了. 这里panel自己可以加背景图或直接搞个图 ...
- CSS3自定义滚动条样式 -webkit-scrollbar(转)
有没有觉得浏览器自带的原始滚动条很不美观,同时也有看到很多网站的自定义滚动条显得高端,就连chrome32.0开发板都抛弃了原始的滚动条,美观多了.那webkit浏览器是如何自定义滚动条的呢? 前言 ...
- jquery自定义滚动条 鼠标移入或滚轮时显示 鼠标离开或悬停超时时隐藏
一.需求: 我需要做一个多媒体播放页面,左侧为播放列表,右侧为播放器.为了避免系统滚动条把列表和播放器隔断开,左侧列表的滚动条需要自定义,并且滚动停止和鼠标离开时要隐藏掉. 二.他山之石: 案例来自h ...
- 利用JS实现自定义滚动条
一般默认的滚动条会比较丑,我们可以用简单的js实现自定义滚动条的功能: 代码如下: <!doctype html> <html> <head> <meta c ...
- javascript 学习之自定义滚动条加滚轮事件
要自己写一个自定义滚动条加上滚轮事件,之前的没有滚轮事件不完整,今天整理了一个. 1.滚轮事件是不兼容的,firefox中是必需要用事件绑定的添加,用的DOMMouseScroll,当滚动鼠标的时候, ...
- 自定义滚动条 - mCustomScrollbar
项目中需要使用自定义滚动条,但是试用了很多都功能不够全,今天发现一个比较全而且用法很简单的 -- mCustomScrollbar http://manos.malihu.gr/jquery-cust ...
- Flex:自定义滚动条样式/隐藏上下箭头
Flex组件自定义滚动条的实现 .scrollBar{ downArrowUpSkin:Embed(source="img/mainLeftScrollBar/bar_bottom.png& ...
- javascript自定义滚动条插件,几行代码的事儿
在实际项目中,经常由于浏览器自带的滚动条样式太戳,而且在各个浏览器中显示不一样,所以我们不得不去实现自定义的滚动条,今天我就用最少的代码实现了一个自定义滚动条,代码量区区只有几十行,使用起来也非常方便 ...
- jQuery自定义滚动条样式插件mCustomScrollbar
如果你构建一个很有特色和创意的网页,那么肯定希望定义网页中的滚动条样式,这方面的 jQuery 插件比较不错的,有两个:jScrollPane 和 mCustomScrollbar. 关于 jScro ...
随机推荐
- 高性能MySQL(三):服务器性能剖析
select * from c LEFT JOIN c100w on c.id=c100w.id; -- 联合查询 show PROFILES; -- 查看查询耗时 select * from c; ...
- vs里根据json快速创建对应类的方法
有时候,我们在调用别人接口的时候,服务端返回了一个json格式的字符串,我们要获取json里面的数据的话一般有两种方式: 1.通过正则 2.反序列化成一个对象 第一种方式这里不再多说,主要说一下第二种 ...
- 关于目录路径path
1.框架的目录结构 yii-1 .htaccess index.php protect -config -controllers -components 2.Linux 服务器 CentOs usr/ ...
- UIButton无法响应点击事件
一.问题描述 因为项目需要,需要UITableView上添加固定的筛选表头,一直固定,不能随UITableView滚动.所以直接将表头与UITableView分离,将它添加到控制器的UIView上,即 ...
- C# 反射
//转载:http://blog.csdn.net/educast/article/details/2894892 反射(Reflection) 在.NET中的反射可以实现从对象的外部来了解对象(或程 ...
- [原创]MvvmLight中用IDialogService替代DialogMessage的用法
在新版的MvvmLight中,DialogMessage被标注为已过时,需要用IDialogService来替代,IDialogService的具体用法如下: 先在主窗体中实现IDialogServi ...
- 非旋treap模板
bzoj3580 非旋转treap 在大神教导下发现split一段区间时先split右边再split左边比较好写 #include <cstdio> #include <cstdli ...
- 远方的塔--Pylons
转自:https://en.wikipedia.org/wiki/Pylons_project#Pylons_Framework Pylons
- Hitachi Content Platform学习
相关资料:https://community.hds.com/groups/developer-network-for-hitachi-content-platform/content?filterI ...
- tp框架之登录验证
登陆控制器 <?php namespace Home\Controller; use Think\Controller; class LoginController extends Contro ...