2017-06-13 93 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); 
    } 
} 
相关问题