欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C# TrackBar拖动条改变滑块颜色

程序员文章站 2022-06-11 15:10:27
本文实例为大家分享了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事件中加入判断。

效果

C# TrackBar拖动条改变滑块颜色

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。