2012-03-30 20 views
0

例如,在我的新類,我有這樣的:如何在新班級中使用Form1 dsigner中的標籤?

if ((connectionStart[f] == i && connectionEnd[f] == j) || (connectionStart[f] == j && connectionEnd[f] == i)) // this checking dosent work good ! 
       { 
        //button2.Enabled = false; 
        return; 
       } 
       else 
       { 
        /*label12.Text = connectionStart[f].ToString(); 
        label11.Text = connectionEnd[f].ToString(); 
        label9.Visible = true; 
        label10.Visible = true; 
        label11.Visible = true; 
        label12.Visible = true;*/ 
       } 

標誌着他們用/ *和* /現在

但我如何使用它們也是BUTTON2因此運行時就會生效程序?

我不能讓按鈕或在Form1上,因爲它們是在設計師,我不想使用靜態標籤是靜態的。

而我不想創建Form1實例。

我也想建立的所有標籤,按鈕和其他對象一樣,有些功能/ s的類,所以我可以使用他們很容易,所以當IM運行程序之後,纔會生效。

現在他們不會在新的類,明確存在的。

**也許創造這一切在Form1上屬性的對象,所以我可以在新的類容易使用它們? **

+0

如果不創建表單的實例,則無法修改表單的值。 Form1不是靜態的,所以你不能像它那樣對待它。 – jzworkman 2012-03-30 17:19:23

+0

使用事件避免將UI實現細節放入非UI相關類中。 – 2012-03-30 17:55:40

回答

1

所有這些控制首先被置於某種形式的,其已經實例上。所以你需要在你的新類中提供這個實例(ctor,property,method等)。

然後在窗體類,你需要通過公共財產或方法來打開訪問控制實例(因爲它們是私人或默認保護)。

然後你可以使用控制在你的類,如:

public class MySecondClass { 

    private MainForm mainForm; 

    public MySecondClass(MainForm mainForm) 
    { 
     this.mainForm = mainForm; 
    } 

    public void SomeFinctionOfNewClass() 
    { 
     this.mainForm.Label10.Text = "Some text for label"; // it's using property 
    } 
} 

作爲一個選項2,您可以創建在您的新類的事件和訂閱它在窗體類,你可以訪問控制。然後使用事件參數,您可以將控件的設置提供給偶數處理程序。在這種情況下,你不會打開任何其他地方的控件,然後形成課堂。