以下是对我要实现的目标的解释:
我有一个文本框,我在我的表单上用作“调试”或“信息”窗口。我想要做的是让我创建的任何类在有信息发布到调试窗口时抛出一个事件,然后让文本窗口订阅所述事件,并在每次出现新内容时发布。我是试图使我的课程不需要文本框的知识,但仍然能够将所有信息传递到文本框。
是否有可能在类之间有一个'shared'事件(可能使用一个接口),这样我只需要订阅那一个事件,它将从所有抛出事件的类中拉出来?
对于视觉,它基本上看起来像这样:
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
}
}
这是可能的还是我的摇杆?
答案 0 :(得分: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");
请注意,代码不是线程安全的。有关详细信息,请参阅Automating the InvokeRequired code pattern及相关信息。