2017-06-13 116 views
-1

問題:我想將相同的消息寫入正在寫入日誌文件的文本框控件。將代理添加到Windows窗體

我有一個窗體窗體(Form1.cs),它調用一個靜態方法的橫切類。在每個橫切方法中,他們調用WriteLogEntry來更新他們正在做什麼的日誌文件。我想向Form1發送一個事件,這樣我就可以將相同的日誌消息寫入窗體上的控件。

我已經看過一些事件,但沒有足夠理解這些例子,並沒有找到足夠簡單的例子來做我想做的事情。有人能告訴我一個如何添加一個事件到我的代碼來完成這個的一個簡單的例子嗎?

namespace MainForm 
{ 
    public delegate void MyDel(string str); 

    public partial class Form1 : Form 
    { 
     public event MyDel MyEvent; 

     public Form1() 
     { 
      InitializeComponent(); 

      MyEvent += new MyDel(WriteSomething); 

      Crosscutting.DoSomething(); 
     } 

     public void WriteSomething(string message) 
     { 
      Console.WriteLine(message); 
     } 
    } 

    //Crosscutting.cs 

    public class Crosscutting 
    { 
     private static void WriteLogEntry(string message) 
     { 
      // Code to write message to log file. 
     } 

     public static void DoSomething() 
     { 
      WriteSomething obj = new WriteSomething(); 

      // Code to do something. 

      WriteLogEntry("I'm doing something"); 
     } 
    } 
} 
+0

有很多如何編寫的例子'活動以及Delegates'這不是論壇會問如何做的東西,你可以很容易地用Google搜索,發現的例子1000的 – MethodMan

+1

你至少應該嘗試將事件添加到您的代碼中。當您收到錯誤或其他某種意想不到的結果時,請回復並尋求有關問題的幫助。您目前的問題沒有任何問題需要解決 –

+0

https://www.google.com/search?q=c%23+event+log+entry&oq=C%23+Eventlog+en&aqs=chrome.5.69i57j69i58j0l4.9567j0J7&sourceid = chrome&ie = UTF-8 – MethodMan

回答

0

在無法弄清楚如何使用委託返回表單之後,我嘗試了另一種方式。通過在「MyClass」上創建Form1的實例,我可以使用公共方法回寫到表單。不是我想要的方式,但它是現在完成它的一種方式。如果有人能夠解釋如何以更好的方式做到這一點,請這樣做。

public partial class Form1 : Form 
{ 
    private string message = string.Empty; 

    public static Form1 form; 

    public Form1() 
    { 
     InitializeComponent(); 

     form = this; 
    } 

    public void UpdateTextBox(string message) 
    { 
     textBox1.Text += message + Environment.NewLine; 

     this.Update(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     var myClass = new MyClass(); 

     myClass.DoSomething(); 
    } 
} 


public class MyClass 
{ 
    public void DoSomething() 
    { 
     Log("I did something"); 
    } 

    private void Log(string message) 
    { 
     Console.WriteLine(message); 

     Form1.form.UpdateTextBox(message); 
    } 
} 
相關問題