網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
文章描述
跑馬燈效果,功能效果大家應(yīng)該都知道,就是當(dāng)我們的文字過(guò)長(zhǎng),整個(gè)頁(yè)面放不下的時(shí)候(一般用于公告等),可以讓它自動(dòng)實(shí)現(xiàn)來(lái)回滾動(dòng),以讓客戶可以看到完整的信息(雖然要多等一會(huì)兒時(shí)間)。
其實(shí)對(duì)于Winform這種技術(shù),實(shí)現(xiàn)任何的動(dòng)態(tài)效果相對(duì)來(lái)說(shuō)都比較麻煩。而且一般都需要搭配定時(shí)器使用,當(dāng)然,這次要寫(xiě)的跑馬燈效果也是一樣的,使用了System.Timers.Timer
來(lái)實(shí)現(xiàn),關(guān)于其他定時(shí)器以及用法,之前文章有寫(xiě)過(guò),有興趣的可以翻一下。
因?yàn)槭褂寐闊砸M(jìn)行封裝,所以要不斷的造輪子(盡管是重復(fù)的),但重復(fù)也是一個(gè)加強(qiáng)記憶以及不斷深入的過(guò)程,我認(rèn)為這并不是多余的。因此,為了方便調(diào)用,還是用自定義控件封裝一下屬性,使用的時(shí)候只要設(shè)置屬性即可。
開(kāi)發(fā)環(huán)境
.NET Framework版本:4.5
開(kāi)發(fā)工具
?Visual Studio 2013
實(shí)現(xiàn)代碼
public partial class CustomLable : Label { System.Timers.Timer timer = new System.Timers.Timer(200); int offset = 5;//偏移量 PointF textPoint; public CustomLable() { InitializeComponent(); textPoint = new PointF(this.Width, 0); timer.Elapsed += (s, e) => { try { if (!IsDisposed) { Graphics g = CreateGraphics(); SizeF textSize = g.MeasureString(Text, Font); textPoint.X -= offset; if (textPoint.X <= -textSize.Width) { textPoint.X = Width; } g.Clear(BackColor); g.DrawString(Text,Font, new SolidBrush(ForeColor), textPoint); } } catch { } }; } protected override void OnPaint(PaintEventArgs pe) { base.OnPaint(pe); } private bool _IsMarquee; [Browsable(true)] [Description("是否以跑馬燈效果顯示")] public bool IsMarquee { get { return _IsMarquee; } set { _IsMarquee = value; Marquee(); } } public void Marquee() { if (IsMarquee) { timer.Start(); } else { timer.Stop(); textPoint = new PointF(0, 0); try { if (!IsDisposed) { Graphics g = CreateGraphics(); g.Clear(BackColor); g.DrawString(Text, Font, new SolidBrush(ForeColor), textPoint); } } } } }
private void button1_Click(object sender, EventArgs e) { customLable1.IsMarquee = !customLable1.IsMarquee; }
實(shí)現(xiàn)效果
代碼解析:由于我們直接是在IsMarquee的set屬性中就調(diào)用了Timer事件;所以即便不運(yùn)行,在設(shè)計(jì)窗體時(shí)改變屬性就可以直接看到效果。
原文鏈接:https://mp.weixin.qq.com/s/WOQs_XvDD8Hq9aM-_ERDYw
相關(guān)推薦
- 2022-09-22 k8s 配置存儲(chǔ)之 Configmap & secret
- 2022-04-15 MAUI使用Maui.Graphics.Controls繪制控件詳解_實(shí)用技巧
- 2022-10-10 Python?pygame?動(dòng)畫(huà)游戲循環(huán)游戲時(shí)鐘實(shí)現(xiàn)原理_python
- 2023-05-31 Pandas提取含有指定字符串的行(完全匹配,部分匹配)_python
- 2022-05-12 Android 11 適配存儲(chǔ)權(quán)限
- 2022-08-07 Go?gRPC超時(shí)控制Deadlines用法詳解_Golang
- 2022-09-30 Go語(yǔ)言編譯原理之變量捕獲_Golang
- 2022-11-12 超詳細(xì)解析C++實(shí)現(xiàn)快速排序算法的方法_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支