2014-02-25 177 views
1

我想知道是否有任何解決方案用計時器動畫標籤?我希望label2向左緩慢前進,直到擊中label1並且它被擊中時,從已經開始向左的位置向後退。 我嘗試這樣做,但是當打LABEL1它停止:C#從左至右移動標籤

 label2.Location = new Point(label2.Location.X - 4, label2.Location.Y); 

     if (label2.Location.X == label1.Location.Y) 
     { 
      label2.Location = new Point(label2.Location.X + 4, label2.Location.Y); 
     } 

回答

3

你是比較label2.Location.X == label1.Location.Y,這似乎是一個錯字。

你需要一個方向變化,你需要存儲Label2的原來的位置,所以它知道去哪裏:

label2.Location = new Point(label2.Location.X + step, label2.Location.Y); 
if (label2.Location.X <= label1.Location.X) { 
    step = 4; 
} else if (label2.Location.X >= originalX) { 
    step = -4; 
} 

要設置的變量:

int step = -4; 
int originalX; 

,然後使用加載覆蓋方法來設置原始X值:

protected override void OnLoad(EventArgs e) { 
    base.OnLoad(e); 
    originalX = label2.Location.X; 
} 
+0

請問你能寫得更清楚嗎? – Castiel

1

我覺得你總是向左移動。你不應該使用變量來跟蹤你想要移動的方向。

從這個意義上說,您需要檢查何時到達右邊距再次改變方向。

+0

以及我應該如何檢查? – Castiel

+0

通過保存label2的Location屬性的初始值。這樣你就可以檢查你是否達到了極限。另一種方法是,如果label2必須使它返回到表單的右邊界,那麼檢查label2.Location.X + label2.Width是否等於form.Width。 – VVP

+0

oke,但是label7會一直到達整個label6,我的意思是把它放在它上面,而我只想達到它的正確部分而不是左邊的部分。 – Castiel