C# TrackBar拖动条改变滑块颜色
作者:小豹小小小 发布时间:2021-12-22 22:11:07
标签:C#,拖动条,颜色
本文实例为大家分享了C# TrackBar拖动条改变滑块颜色的具体代码,供大家参考,具体内容如下
原理
1.TrackBar拖动条的滑块的默认颜色是(23,23,23)偏蓝色,遍历TrackBar控件中的每一个像素点,获取颜色是(23,23,23)的像素点,用另外一种颜色在像素点的位置上绘制直径为1的圆形。
2.添加布尔值,判断鼠标是否在TrackBar中。
3.在鼠标进入控件事件中,布尔值为true;在鼠标离开控件事件中,布尔值为false。
4.加入1ms的定时器,在定时器事件中,如果布尔值为true,则引用改变颜色的方法。
缺陷
定位不是很精准,y方向会靠下一点,在拖动的时候,会有小bug。所以在应用于纵向的TrackBar拖动条时,绘制的时候需要y - (float)0.5。此时的bug会不明显,将就能够使用。(依然存在的小bug,会在滑块的尖儿上,留有痕迹,拖动的时候会留下混迹,是一个小点儿,可以再改进)
代码
改变颜色的方法:
public class ChangeSliderColor
{
//改变滑块颜色(横向控件)
public void LevelChangeColor(Bitmap bitmap, Rectangle rectangle,Graphics graphics,Color color,TrackBar trackBar)
{
bitmap = new Bitmap(trackBar.Width, trackBar.Height);
rectangle = new Rectangle(0, 0, trackBar.Width, trackBar.Height);
graphics = trackBar.CreateGraphics();
trackBar.DrawToBitmap(bitmap, rectangle);
for (int x = 0; x < trackBar.Width; x++)
{
for (int y = 0;y < trackBar.Height; y++)
{
color = bitmap.GetPixel(x, y);
if (color == Color.FromArgb(23,23,23))
{
graphics.DrawEllipse(new Pen(Color.Red), x, y, 1, 1);//这里的new Pen即改变后的颜色
}
}
}
}
//改变滑块颜色(竖向控件)
public void VerticalChangeColor(Bitmap bitmap, Rectangle rectangle, Graphics graphics, Color color, TrackBar trackBar)
{
bitmap = new Bitmap(trackBar.Width, trackBar.Height);
rectangle = new Rectangle(0, 0, trackBar.Width, trackBar.Height);
graphics = trackBar.CreateGraphics();
trackBar.DrawToBitmap(bitmap, rectangle);
for (int x = 0; x < trackBar.Width; x++)
{
for (int y = 0; y < trackBar.Height; y++)
{
color = bitmap.GetPixel(x, y);
if (color == Color.FromArgb(23, 23, 23))
{
graphics.DrawEllipse(new Pen(Color.Red), x, y - (float)0.5, 1, 1);
}
}
}
}
}
引用:
Bitmap bitmap; Rectangle rectangle; Graphics graphics; Color color;
bool isIntrackBar = false;//判断鼠标是否在trackBar中
private void timer_Tick(object sender, EventArgs e)
{
if (isIntrackBar == true)
{
ChangeSliderColor csc = new ChangeSliderColor();
csc.LevelChangeColor(bitmap, rectangle, graphics, color, trackBar);
}
}
//鼠标进入trackBar时,布尔值为true
private void trackBar_MouseEnter(object sender, EventArgs e)
{
isIntrackBar = true;
}
//鼠标从trackBar中出来时,布尔值为false
private void trackBar_MouseLeave(object sender, EventArgs e)
{
isIntrackBar = false;
}
如果是纵向TrackBar,则引用ChangeSliderColor的VerticalChangeColor方法。
如果在一个窗体中,存在多个TrackBar,则每个trackBar一个布尔值,并在每个trackBar的MouseEnter事件中加入timer.Start(),在MouseLeave事件中加入timer.Stop(),并在timer_Tick事件中加入判断。
效果
来源:https://blog.csdn.net/weixin_44523029/article/details/115286332


猜你喜欢
- 先扯再说最近一直在研究某个国产开源的MySQL数据库中间件,拉下其最新版的代码到eclipse后,启动起来,然后做各种测试和代码追踪;用完想
- 客户端获取后台支付API请求参数的设计参数样例:{data: {method: 1,platform: 1,version:"1.
- API参数:/**fileName: 临时文件的名字, 生成后的文件名字将会是【fileName + 随机数】suffix: 文件后缀,例如
- 托管资源指的是.NET可以自动进行回收的资源,主要是指托管堆上分配的内存资源。托管资源的回收工作是不需要人工干预的,有.NET运行库在合适调
- 文件下载这种事情是很耗时的。之前使用AsyncTask这样的异步类来做下载,然后切到后台就 * 掉。所以打算试试Service。(不过按目前那
- 1.根据单个分隔字符用split截取例如string st="GT123_1";string[] sArray=st.s
- 缓存在很多情况下需要用到,合理利用缓存可以一方面可以提高程序的响应速度,同时可以减少对特定资源访问的压力。本文主要针对自己在Winform方
- 下面一段代码准确的介绍了java实现单链表逆序,具体内容就不做详解了,有需要的朋友可以直接拷贝了package com.ckw.miansh
- 前言:回顾上一节服务器配置的内容,我们已经可以自己完成公众号服务器的配置。配置完成之后,我们就可以通过调用的方式,完成对消息管理的处理。当用
- 先直接看看效果吧初始情况 点击一个作为标记 再次点击后删除 3.这里还要感谢前辈的代码作为参考,毕竟以前也没有写过关于日历方面的东西,别人确
- 在上一节,我们已经完成了项目的整体技术架构设计和具体的数据库设计,接下来,我们搭建整体的开发框架。开发工具选用Idea。开发工具只是为了提高
- 为什么要有线程池?在实际使用中,服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大,所以要尽可能减少创建和销毁线程的次数。由于没有线
- SqlMapConfig.xml的约束,也就是Mybatis主配置文件的约束<?xml version="1.0"
- HashTable和HashMap区别第一,继承的父类不同。Hashtable继承自Dictionary类,而HashMap继承自Abstr
- 队列在编程语言中是如何定义的呢?小编与大家分享自己的经验。队列的定义队列是限制结点插入操作固定在一端进行,而结点的删除操作固定在另一端进行的
- springboot 参数格式校验@Validated 字面意思校验@RequestBody该注解不用多说,意思是接收为json格式的参数@
- RestTemplate加@Autowired注入不了1、在启动类加入如图箭头所示代码:然后在进行@Autowired发现不报错了。完美解决
- 0x01 创建要转换的类和主函数注意这里一定要实现序列化package day1; import java.io.Serializable;
- 我就废话不多说了,大家还是直接看代码吧~package com.cloudtech.web.util; import java.io.Buf
- 学会了Paint,Canvas的基本用法之后,我们就可以动手开始实践了,先写个简单的图片加载进度条看看。按照惯例,先看效果图,再决定要不要往