2014-10-06 165 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