跑馬燈 Marquee

提供大家兩種跑馬燈的方法,簡單好玩。

跑馬燈的做法實在很多,重點是要讓字會跑,不論方向道理都是相同的,然而選擇讓字跑動的引擎是很重要的,前幾篇常用到的【跨執行緒對控件做控制,使用BackgroundWorker】、【跨執行緒對控件做控制,使用System.Threading】就不適合了,不是不能做,只是殺雞不用牛刀吧!在此我們選擇用TIMER,俗稱的時間人,可以提供穩定的動力,而且簡單方便,殺雞還是用殺雞的刀吧!

方法一:Substring( X , Y )

使用這個方法的理論在於減少字串的長度,這個方法最好要配合PadLeft將左邊填滿,以免空間很大,字卻只跑在一邊短短的跑道上。

 

1.先將字串的左邊用空白字元填滿,再將長度存起來

	string Contain = "";
Contain = textBox_CT.Text.PadLeft(100, ' ');
TextLength = Contain.Length;

 

2.在Timer事件中寫入跑馬燈的位移程式碼,這個範例中使用了Label、TextBox兩個元件

	if (TextLength > 0)
{
    label1.Text = Contain.Substring(i, TextLength);
    textBox1.Text = Contain.Substring(i, TextLength);
    TextLength = TextLength - 1;
    i = i + 1;
}
else if (TextLength < 1)
{
    label1.Text = Contain;
    textBox1.Text = Contain;
    TextLength = Contain.Length;
    i = 0;
}

第一個方法就大功告成了!

 

方法二:讓整個元件移動

這個方法其實很不好,因為元件移動的MAX與MINI值很不好控制,要計算得很精準才會漂亮,通常向我一樣笨一點的人,算距離會算到頭爆炸。

 

1.計算好元件的寬度與父容器的寬度,調整到你最喜歡的姿勢位置與跑動距離,將條件寫在Timer中,讓他不斷的跑阿跑

PS:【label2.Left = label2.Left - 3;】減去的數字越大,跑的速度越快,減太多,會變成用跳的

 

	if (label2.Left + label2.Width > 0)
{
    label2.Left = label2.Left - 3;
}
else if (label2.Left < 1)
{
    label2.Left = 390;
}

第二個方法也完成了!

 

以上的兩個方式都很簡單吧,其實還有第三個方法:直接指定元件的Location,不過我翻了一下MSDN,這個做法好像會使系統重繪元件(有誤請糾正),而且長期的不斷的更新元件位置,其實是一種浪費效能的做法,重複一開始說的:殺雞不用牛刀,但還是提供各位指定元件Location的方法:

	物件名稱.Location = new Point(x, y);

指定Location的寫法就是這樣,看似簡單卻隱藏殺機(誤)。

 

PeterDotNetCS10091402.zip