2017-04-19 4 views
0

私はC#を初めて使い、メールを送るためのアプリケーションを作っています。私がしたいのは、リアルタイムで送信する電子メールをテキストボックスフィールドに表示することです。フォームではないクラスのテキストフィールドにリアルタイムデータを表示できますか?

操作:アプリケーションを実行すると、データベースと通信してレコードを取得し、しばらくしてレコードを調べて対応するメールを送信します。これまでのところとてもうまく動作しています。

私がしたいこと:各メールを送信した後、リアルタイムで送信された電子メールをテキストボックスに表示することですが、できません。

以下は、私のプロジェクトの構造の非常に単純なコードを示しています。

/****************CLASS FORM1***************************/ 
namespace envioEmails 
{ 
    public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     /********Shipping button*********/ 
     private void button1_Click(object sender, EventArgs e) 
     { 
      Consultas objetoConsultas = new Consultas(); 
      objetoConsultas.consultaBaseDatos(); 

     } 


     private void campoTextBox_TextChanged_1(object sender, EventArgs e) 
     { 
      //In this textbox is where I want to display the data in real time.   
     } 

    } 
} 

/*********CLASS CONSULTAS (This class is not a form)*******************/ 


namespace envioEmails 
{ 

    class Consultas 
    { 

     public void consultaBaseDatos(){ 

      //Here I connect to the database and get the records. 

      //Then I run the records with a while ... 
      while(myreader.Read()){ 
       string email=myreader["emails"].ToString()); 
       if(this.enviarCorreo(email){ 
        /**This is where I should call the fieldTextBox event, but I am unable to do so.**/ 
        campoTextBox.Text=email; 
       } 

      } 
     } 

     private bool enviarCorreo(string email){ 
      //I connect to the SMTP server and send the mail. 

      try 
      { 
       //Code for sending .... 
       return true; 
      } 
      catch() 
      { 
       return false; 
      } 

     } 
    } 
} 

次のコードに示すように、私もイベントにしながらポイントの内側にForm1クラスをインスタンス化しようとしましたが、私はどんな結果

while(myreader.Read()) 
{ 
    string email=myreader["emails"].ToString()); 
    if(this.enviarCorreo(email){ 

     Form1 formularioPadre = new Form1(); 
    ((TextBox)formularioPadre.Controls["campoTextBox"]).Text = email; 

    } 
} 

は、あなたの将来をありがとう取得していません答え。

+0

私は 'TextChanged'イベントがこれと何をしなければならないのか分かりません。説明できますか? – Crowcoder

答えて

0

最も簡単な方法は、おそらく電子メールでList<string>を返すために、あなたのconsultaBaseDatosを変更されています

public List<string> consultaBaseDatos(){ 
    List<string> listEmails= new List<string>();  
    //Here I connect to the database and get the records. 

    //Then I run the records with a while ... 
    while(myreader.Read()) 
    { 
     string email=myreader["emails"].ToString()); 
     if(this.enviarCorreo(email) 
     { 
       /**This is where I should call the fieldTextBox event, but I am unable to do so.**/ 
       listEmails.Add(email); 
     } 
    } 
    return listEmails; 
} 

その後、フォームにあなたは、単に行うことができます。

private void button1_Click(object sender, EventArgs e) 
{ 
    Consultas objetoConsultas = new Consultas(); 
    List<string> listEmails=objetoConsultas.consultaBaseDatos(); 
    campoTextBox.Text=string.Join(",",listEmails); 

} 
+0

返信いただきありがとうございますが、動作しません。 あなたの例では、プログラムの最後にコンテンツが表示されますが、実行中にそのコンテンツを表示するだけです。 – Alonso

+0

それから私はイベントを使って、各電子メールでそのイベントを起こし、あなたのフォームにそれを購読します。 – Pikoh

0

申し訳ありませんが、私はできません私は答えとしてこれを投稿しなくてはなりません。

送信された電子メールを確認し、テキストフィールドの内容を定期的に更新するには、トリガーが必要です。あなたはタイマーコントロールを使ってみましたか?すべての "タイマーティックイベント"は、あなたが存在する場合、あなたのテキストフィールドを更新する電子メールのリストが表示されているかどうかを確認することができます。

+0

心配しないでください。私はすでに解決済みです。バックグラウンドで実行するスレッドを作成する必要がありました。しかし、どうもありがとうございました。 – Alonso

関連する問題