網站首頁 編程語言 正文
本文實例為大家分享了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
相關推薦
- 2022-03-28 c語言經典習題之逆序字符串詳解_C 語言
- 2022-08-19 insert語句返回新增主鍵id失敗的解決方法
- 2022-06-18 C#使用ThreadPriority設置線程優(yōu)先級_C#教程
- 2022-12-16 簡單聊聊Go語言里面的閉包_Golang
- 2022-02-21 C語言switch語句和if用法介紹_C 語言
- 2022-03-23 圖形學之Unity渲染管線流程分析_C#教程
- 2022-10-03 Python使用Rich?type和TinyDB構建聯系人通訊錄_python
- 2024-07-13 根據腳手架archetype快速構建spring boot/cloud項目
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支