winform动态的文字效果
生活随笔
收集整理的這篇文章主要介紹了
winform动态的文字效果
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
效果圖如下
private void Form1_Load(object sender, EventArgs e){Graphics Car_Paint = panel1.CreateGraphics();//實例化繪圖對象string Car_Str = "青島**軟件公司";//定義要繪制的動態(tài)文字Character character = new Character();//實例化自定義類對象character.DynamicEffect(panel1, Car_Str);//在窗體上顯示動態(tài)文字 }class Character{System.Drawing.Graphics g;//定義Graphics對象static int[] FSize = new int[3] { 20, 25, 30 };//設(shè)置字體的大小int Str_block = 5;//字體間的間隔Font Str_Font = new Font("宋體", FSize[0], FontStyle.Bold);//定義字體樣式Color Str_Color = Color.Orange;//定義字體顏色float Str_Width = 0;//獲取字符串的位置float Str_Height = 0;float Panel_W = 0;//獲取控件的寬度float Panel_H = 0;//獲取控件的高度Color Panel_C;//記錄控件的背景顏色float Str_Odd_Width = 0;//獲取單個文字的寬度Thread th;//定義線程/// <summary>/// 在Panel控件中繪制動畫文字/// </summary>/// <param Panel="C_Panel">顯示文字的容器控件</param>/// <param string="C_Str">文字字符串</param>public void CartoonEffect(Panel C_Panel, string C_Str){g = C_Panel.CreateGraphics();//為控件創(chuàng)建Graphics對象Panel_H = C_Panel.Height;//獲取控件的高度Panel_W = C_Panel.Width;//獲取控件的寬度Panel_C = C_Panel.BackColor;//獲取控件背景顏色GetTextInfo(C_Str);//獲取文字的大小及位置g.FillRectangle(new SolidBrush(Panel_C), 0, 0, Panel_W, Panel_H);//用控件背景填充控件ProtractText(C_Str, 0);//繪制文字//實例化ParameterizedThreadStart委托線程th = new Thread(new ParameterizedThreadStart(DynamicText));th.Start(C_Str);//傳遞一個字符串的參數(shù) }/// <summary>/// 獲取文字的大小及繪制位置/// </summary>/// <param string="C_Str">文字字符串</param>public void GetTextInfo(string C_Str){SizeF TitSize = g.MeasureString(C_Str, Str_Font);//將繪制的字符串進行格式化Str_Width = TitSize.Width;//獲取字符串的寬度Str_Height = TitSize.Height;//獲取字符串的高度Str_Odd_Width = Str_Width / (float)C_Str.Length;//獲取單個文字的寬度Str_Width = (float)((Str_Odd_Width + Str_block) * C_Str.Length);//獲取文字的寬度Str_Width = (Panel_W - Str_Width) / 2F;//使文字居中Str_Height = Panel_H - Str_Height;//使文字顯示在控件底端 }/// <summary>/// 繪制全部文字/// </summary>/// <param string="C_Str">繪制的文字字符串</param>public void ProtractText(string C_Str, int n){float Str_Place = Str_Width;//單個字符的位置for (int i = 0; i < C_Str.Length; i++)//遍歷字符串中的文字 {if (i != n)ProtractOddText(C_Str[i].ToString(), Str_Font, Str_Place, Str_Height);//繪制單個文字Str_Place += Str_Odd_Width + Str_block;//獲取下一個文字的位置 }}/// <summary>/// 繪制單個文字/// </summary>/// <param name="C_Odd_Str">單個文字字符串</param>/// <param name="S_Font">文本樣式</param>/// <param name="left"></param>/// <param name="top"></param>public void ProtractOddText(string C_Odd_Str, Font S_Font, float left, float top){g.DrawString(C_Odd_Str, S_Font, new SolidBrush(Str_Color), new PointF(left, top));//繪制字符串中單個文字 }/// <summary>/// 通過迭代器實現(xiàn)字符串的遍歷/// </summary>/// <param string="n">文字字符串</param>/// <returns>返回單個文字</returns>public static IEnumerable<object> Transpose(string n){if (n.Length > 0)//如果泛型不為空 {foreach (object i in n)//對字符串進行遍歷yield return i;}}/// <summary>/// 繪制動態(tài)文字/// </summary>/// <param string="C_Str">繪制的文字字符串</param>public void DynamicText(Object C_Str){float tem_left = 0;//獲取當(dāng)前文字的左端位置float tem_top = 0;//獲取當(dāng)前文字的頂端位置float tem_w = 0;//獲取文字的寬度float tem_h = 0;//獲取文字的高度float tem_place = Str_Width;//獲取起始文字的位置Font Tem_Font = new Font("黑體", FSize[0], FontStyle.Bold);//定義字體樣式int p = 0;//記錄字符串中文字的索引號int Str_Index = 0;try{foreach (object s in Transpose(C_Str.ToString()))//遍歷字符串 {for (int i = 1; i < 5; i++)// {if (i >= 3)p = Convert.ToInt16(Math.Floor(i / 2F));elsep = i;ProtractText(C_Str.ToString(), Str_Index);Tem_Font = new Font("黑體", FSize[p], FontStyle.Bold);//定義字體樣式SizeF TitSize = g.MeasureString(s.ToString(), Str_Font);//將繪制的單個文字進行格式化tem_w = TitSize.Width;//獲取文字的寬度tem_h = TitSize.Height;//獲取文字串的高度tem_left = tem_place - (tem_w - Str_Odd_Width) / 2F;//獲取文字改變大小后的左端位置tem_top = Str_Height - (Str_Height - tem_h) / 2F;//獲取文字改變大小后的頂端位置ProtractOddText(s.ToString(), Tem_Font, tem_left, tem_top);//繪制單個文字Thread.Sleep(200);//待待0.2秒g.FillRectangle(new SolidBrush(Panel_C), 0, 0, Panel_W, Panel_H);//清空繪制的文字 }tem_place += Str_Odd_Width + Str_block;//計算下一個文字的左端位置Str_Index += 1;//將索引號定位到下一個文字 }ProtractText(C_Str.ToString(), -1);//恢復(fù)文字的原始繪制樣式//實例化ParameterizedThreadStart委托線程th = new Thread(new ParameterizedThreadStart(DynamicText));th.Start(C_Str);//傳遞一個字符串的參數(shù) }catch//這里之所以用異常語句,是在關(guān)閉窗體時關(guān)閉線程 {th.Abort();//關(guān)閉線程 }}}
?
轉(zhuǎn)載于:https://www.cnblogs.com/xuekai-to-sharp/p/3555850.html
總結(jié)
以上是生活随笔為你收集整理的winform动态的文字效果的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 走到海角天涯是什么歌啊?
- 下一篇: 注册个香港公司大概需要多少费用