2013-11-02 34 views
0

好吧,我試圖嘗試在窗體上移動按鈕。我用下面的代碼來調用按鈕:C# - 動態創建和移動圖片框

i++; 
Button button = new Button(); 
button.Location = new Point(160, 30 * i + 10); 
button.Click += new EventHandler(b_Click); 
button.Tag = i; 
panel1.Controls.Add(button); 

我能夠點擊每個按鈕,並得到一個消息框顯示他們的標籤,但我想用自己的標籤,以此來與計時器走動的按鈕。

+1

你到目前爲止嘗試過什麼?你需要在你的窗體上使用一個'Timer'(假設這是'WinForms')並且引用你的按鈕。另外,如果按鈕距離彼此相距很遠,您可能需要使用一種控制來簡化操作,而不是手動定位每個按鈕 - 請查看['FlowLayoutPanel'](http://msdn.microsoft.com/ en-us/library/system.windows.forms.flowlayoutpanel(v = vs.110).aspx)和['StackPanel'](http://msdn.microsoft.com/zh-cn/library/system.windows。 controls.stackpanel.aspx)控件。 –

+0

如果這是一個循環(我認爲它是它的樣子),你一直在創建新的按鈕...而不是移動你的按鈕... – Noctis

+0

你的按鈕標記是你分配的整數循環 - 知道哪一個移動的標準是什麼? – OneFineDay

回答

0

假設這是WinForms,您可以在Form Controls集合上使用Linq查詢來查找按鈕的標籤。

var found = (from Control c 
       in this.Controls 
       where c.Tag == "ButtonTag" 
       select c).FirstOrDefault() as Button; 

    if (found != null) 
    { 
     // manipulate the button 
    } 

我應該注意到,這隻會在窗體上找到頂層控件。它不會找到容器控件內的按鈕(如面板)。如果您的按鈕位於容器中,請將「this」替換爲容器的名稱。

var found = (from Control c 
       in panel1.Controls 
       where c.Tag == "ButtonTag" 
       select c).FirstOrDefault() as Button; 

我也應該注意到,這可能是有大量的控件的窗體上緩慢。