2014-10-06 143 views
-1

將文本框的內容從窗體傳遞到另一個窗體。通過構造函數傳遞值

我已經被告知無數次該怎麼做,我嘗試了它,但我失敗了。 我似乎通過了罰款,但Mailer.cs形式以某種方式失去了剛剛收到的東西。

下面是我的ContactList.cs的代碼,它應該將SelectedTo.Text發送到Mailer.csMailTo.Text控件。

這只是一段代碼,只需要顯示問題區域。

public partial class ContactList : Form 
{ 
    public Contact Contact { get; set; } 
    public Mailer mailerOwner; 

    public ContactList(Mailer mailerOwner) 
    { 
     InitializeComponent(); 
     this.Load += ContactList_Load; 
     this.mailerOwner = mailerOwner; 
     ConfigureGrid(); 
    } 

這裏是發送到Mailer.cs

private void OkAdd_Click(object sender, EventArgs e) 
{ 
    Mailer mailer = new Mailer(SelectedTo.Text); 
    this.Close(); 
} 

現在,這裏從Mailer.cs

public Mailer(string contactlist) 
{ 
    InitializeComponent(); 
    MailTo.Text = contactlist; 
} 

初始化呼叫我在做什麼錯誤的方法? :|

+0

你能更具體地瞭解*什麼*不工作?乍一看你的代碼看起來很好。 – BradleyDotNET 2014-10-06 19:47:05

+0

您的ContactList類中有一個Mailer對象,但是您在Click處理程序中使用該文本創建了一個新實例。那真的是你想要做的嗎? – helrich 2014-10-06 19:47:51

+0

您並未更新您認爲自己的表格。在你的點擊事件中,你正在創建一個_new_表單並更新它,然後把它扔掉。 mailerOwner是你希望更新的表單嗎?在你的'OKAdd_Click'方法中,只需使用'mailerOwner.MailTo.Text = SelectedTo.Text'。這假定MailTo文本框是公開的。 – 2014-10-06 20:19:10

回答

1

在您的OkAdd_Click事件中,您正在實例化一個新的Mailer實例。當點擊事件完成時,此實例將超出範圍。我的猜測是,它適用於郵件實例化的微秒。

如果您將郵件程序設爲類級別成員而不是本地成員(在事件範圍),您可能會看到結果。

+0

你的意思是在OkAdd方法之外移動郵件程序=新的郵件程序? – Bitgod 2014-10-06 19:59:16

+0

命令「Mailer mailer = new Mailer(SomeText);」是兩部分。郵件的定義是「郵件郵件」;和實例化,「郵件=新郵件(SomeText);」你已經將它們合併爲一個聲明。只要你在更高的範圍內定義*郵件,你應該沒問題。如果這是最有意義的地方,您可以隨意在click事件中實例化*郵件程序。 – DeadZone 2014-10-06 20:08:57

相關問題