検索してみましたが、探していたものとまったく同じものを見つけることができませんでした。最終的に 4 つまたは 5 つのフォームを持つ WPF デスクトップ アプリケーションを作成しています。各フォームは、電子メールで送信されるデータを収集します。メールを送信するためのコードを含む別のクラス (SendMail) も作成しました。さまざまなフォームのテキスト ボックスからテキストにアクセスし、SendMail クラスのメソッドを介して送信できるようにしたいと考えています。
現在、いくつかのフィールドと次のページ、送信、および終了ボタンを備えた 2 つの基本的なフォームがセットアップされているだけです。次のページに記入する必要がない場合は、どのページからでもデータを送信できるようにしたいと考えています。現在、内部プロパティを介して SendMail クラスから各フォームにアクセスできます。最初のフォームの [送信] ボタンをクリックすると、電子メールが正しく送信されます。ただし、次のフォームに移動して [送信] ボタンをクリックすると、最初のフォームのテキスト ボックスのテキストを参照しているプロパティに対して、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが表示されます。2 番目のフォームに移動することで、最初のフォームのインスタンスが存在しなくなったと想定しています。
数年前に大学でプログラミングのクラスをいくつか受けましたが、今はもっと真剣に独学で勉強することにしました。私は何冊かの本を読みましたが、数か月しか勉強していないので、おそらく間違った方法でアプローチしています. どんな助けでも大歓迎です。
編集-以下は、要求に応じてコードのサンプルです。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);
}
}