我尝试搜索,但找不到任何能完全满足我的需求的东西。我正在创建一个 WPF 桌面应用程序,它最终将有四个或五个表单。每个表格都将收集要通过电子邮件发送的数据。我还创建了一个单独的类 (SendMail),其中包含发送电子邮件的代码。我希望能够从各种表单的文本框中访问文本,并通过 SendMail 类中的方法发送它们。
目前,我只有两个基本表单,其中包含几个字段和下一页、提交和退出按钮。如果以下页面都不需要填写,我希望能够从任何页面提交数据。我目前可以通过内部属性从 SendMail 类访问每个表单,当我点击第一个表单上的提交按钮时,电子邮件会正确发送。但是,如果我转到下一个表单并单击“提交”按钮,我会收到一个“对象引用未设置为对象的实例”错误,因为该属性引用了第一个表单上的文本框的文本。我假设通过转到第二种形式,第一种形式的实例不再存在。
几年前我在大学里上过几门编程课,但现在我决定自己更认真地学习它。我读过几本书,但只学习了几个月,所以我可能以错误的方式接近这一点。任何帮助表示赞赏。
编辑-以下是一些代码示例,根据要求。我从 SendMail 类中删除了电子邮件地址/密码。
第一个窗口
public partial class MainWindow : Window
{
SendMail page1;
// Properties to allow access to SendMail.
internal string CmbEmail
{
get { return this.cmbEmail.Text; }
}
internal string DateWritten
{
get { return this.dateWritten.Text; }
}
public MainWindow()
{
InitializeComponent();
page1 = new SendMail(this);
}
private void btnSubmit_Click_1(object sender, RoutedEventArgs e)
{
page1.Email();
}
private void btnNextPage_Click(object sender, RoutedEventArgs e)
{
Window1 nextPage = new Window1(this);
nextPage.Show();
this.Close();
}
}
第二个窗口
public partial class Window1 : Window
{
SendMail page2;
public Window1(MainWindow parent)
{
InitializeComponent();
page2 = new SendMail(this);
}
private void btnExit_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
page2.Email();
}
}
发送邮件类
class SendMail
{
MainWindow page1;
Window1 page2;
public SendMail(MainWindow form)
{
page1 = form;
}
public SendMail(Window1 form)
{
page2 = form;
}
public void Email()
{
NetworkCredential cred = new NetworkCredential("", "");
MailMessage msg = new MailMessage();
msg.To.Add("");
// Send an email to address in the Email field, if not empty.
if (page1.CmbEmail != "") // This is the line throwing the error, but only when submitting from the second window.
{
msg.To.Add(page1.CmbEmail);
}
msg.From = new MailAddress("");
msg.Subject = "Garment Order " + page1.DateWritten.ToString();
msg.Body = "Test email";
SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
client.Credentials = cred;
client.EnableSsl = true;
client.Send(msg);
}
}