C# TrackBar拖动条改变滑块颜色
程序员文章站
2022-06-09 18:59:24
本文实例为大家分享了c# trackbar拖动条改变滑块颜色的具体代码,供大家参考,具体内容如下原理1.trackbar拖动条的滑块的默认颜色是(23,23,23)偏蓝色,遍历trackbar控件中的...
本文实例为大家分享了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事件中加入判断。
效果
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。