2014-10-22 30 views
0

我正在做一個註冊系統。在這個系統中,我使用了一種模式,當用戶點擊一個按鈕時顯示的另一種形式。
要顯示的形式,我使用:
c# - 使用不同形式的相同元素

private void btnShowModal_Click(object sender, EventArgs e) 
{ 
    AddUserForm form = new AddUserForm(); 
    form.Show(); 
} 

這個偉大的工程,以顯示形式。現在,這是我的問題:如果我在這個表單中創建一個標籤並嘗試在主表單中使用它作爲參考,我會得到它在上下文中不存在的錯誤。例如,我在AddUserForm中創建了label1。現在,我將嘗試使用在Form1中相同的標籤更改文本:

label1.Text = "I was created in AddUserForm and now I'm at Form1!"; 

...但是這不工作,我得到的錯誤:

The name 'label1' does not exist in the current context. 

如何使用元素兩種形式?我需要添加一個參考?怎麼樣?非常感謝!

回答

1

創建一個創建標籤的基礎表單。然後每個表單可以從基本表單繼承並以這種方式共享。

public class BaseForm : Form 
{ 
    //define label 

} 


public AddUserForm : BaseForm 
{ 
} 
+0

我想: '命名空間Form1中 { 公共類AddUserForm:Form1的 { 公共AddUserForm(){ 在InitializeComponent (); } } }' 但是,這不起作用,來自Form1的元素無法被AddUserForm識別,反之亦然。 – Hypister 2014-10-22 01:22:15

0

在你AddUserForm,創建該屬性:

public string LabelText 
{ 
    get { return label1.Text; } 
    set { label1.Text = value; } 
} 
在Form1中

然後,只需創建AddUserForm實例後添加此行:更一般

form.LabelText = "I was created in AddUserForm and now I'm at Form1!"; 

,而你可能已經暴露了該領域(默認情況下是私密的),這樣做是一個壞主意。在屬性中包裝表單元素可以讓您精確控制外部世界可以更改和不可更改的內容。例如,您可能不希望其他類能夠更改標籤的大小,位置,字體等。或者,也許你會這樣做,但如果是這樣的話,那麼你就會專門爲那些你希望能夠改變的東西添加屬性。

+0

這沒有奏效。沒有任何方法可以添加對第一個表單元素的引用?我將用它來註冊用戶,並且我需要Form1中的一個列表中的一些信息。 – Hypister 2014-10-22 01:38:56

+0

如果你比「這不工作」更具體,那麼答案可以詳細闡述,以解決你遇到的任何具體問題。您可以輕鬆地將數據從一個對象傳遞到另一個對象,一旦每個對象都有對另一個對象的引用。但保留'encapsulation'並確保私人數據對每個對象保持私密是很重要的。使用上述屬性是在這種情況下控制訪問的好方法,只要您正確使用該技術,它就會工作。 – 2014-10-22 06:29:46

+0

那麼,這適用於輔助形式,但不適用於委託人。 如果我在AddUserForm上使用它,我可以從Form1獲取數據,但反之亦然。例如,Form1中的這個: 'public string labelREF { get {return label1.Text; } set {label1.Text = value; } }' This AddUserForm: 'Form1 principalform = new Form1(); principalform.label1 =「我是在Form1中創建的,並且通過點擊AddUserForm中的按鈕來改變我的文本。」 對於AddUserForm這可行,但對於Form1不適用。 – Hypister 2014-10-22 14:42:52

0

我想你可以嘗試這樣的,

Form1.cs的

private void btnShowModal_Click(object sender, EventArgs e) 
    { 
     Form2 frm = new Form2(ref this.label1); 
     frm.ShowDialog(); 
    } 

Form2.cs

Label labelOne = null; 

    public Form2() 
    { 
     InitializeComponent(); 
    } 

    public Form2(ref Label lbl) 
    { 
     InitializeComponent(); 
     labelOne = lbl; 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 
     labelOne.Text = "A"; 
    } 

希望它解決了!

相關問題