1

这是我要实现的目标的解释:

我有一个文本框,用作表单上的“调试”或“信息”窗口。我想做的是让我创建的任何类在它有信息发布到调试窗口时抛出一个事件,然后让文本窗口订阅所述事件,并在每次有新内容时发布。我试图做到这一点,以便我的课程不需要文本框的知识,但仍然有能力将所有信息传递到文本框。

是否可以在类之间有一个“共享”事件(可能使用接口),这样我只需要订阅一个事件,它就会从所有引发事件的类中提取?

对于视觉效果,它基本上看起来像这样:

Public delegate void DebugInfo(string content)

Class foo1
{
   event DebugInfo DebugContentPending

   public void bar()
   {
      DebugContentPending("send this info to the debug window")
   }
}

Class foo2
{
   event DebugInfo DebugContentPending

   public void bar()
   {
      DebugContentPending("send this info to the debug window")
   }
}


Class SomeClass
{
    public void SomeMethod()
    {
       DebugContentPending += new DebugInfo(HandleContent);  //gets events from foo1 and foo2
    }

    public void HandleContent(string content)
    {
       //handle messages
    }
}

这是可能的还是我不在我的摇杆上?

4

1 回答 1

4

很可能您不需要事件。

class DebugLogger
{
    public DebugLogger(TextBox textBox)
    {
        this.TextBox = textBox;
    }

    public TextBox TextBox { get; private set; }

    public static DebugLogger Instance { get; set; }

    public void Write(string text)
    {
        this.TextBox.Text += text;
    }
}

初始化:

DebugLogger.Instance = new DebugLogger(textBox1);

用法:

DebugLogger.Instance.Write("foo");

请注意,代码不是线程安全的。有关更多信息,请参阅自动化 InvokeRequired 代码模式和相关信息。

于 2013-02-10T05:10:40.263 回答