Я пытался искать, но не смог найти ничего, что дало бы мне именно то, что я искал. Я создаю настольное приложение 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();
}
}
Класс SendMail
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);
}
}