我一直在寻找可能的解决方案,但似乎没有一个接近我真正需要的东西。我有一个窗体输出到类库(DLL)。我将此dll引用到控制台应用程序中,然后在dll中启动GUI。我希望能够订阅控件事件并在我的控制台应用程序中执行任何代码。 当我想直接从我的控制台应用程序读取或写入dll中的属性时,我没有问题。例如:
MyDll.MyClass myObj = new MyDll.MyClass();
myObj.Textbox1.Text = "Hello World!";
但是,我想在我的dll中订阅TextChanged事件并将新文本输出到我的控制台应用程序。有点像:
public void textbox1_TextChaned(object sender, EventArgs e)
{
Console.WriteLine(myObj.textbox1.Text);
}
有没有办法直接订阅该活动?或其他一些事件?
答案 0 :(得分:1)
将修饰符textbox1
设置为public
订阅TextChanged
活动:
myObj.Textbox1.TextChanged + = textbox1_TextChaned;
控制台应用程序中的以下代码适合我。我引用的是Windows表单应用程序而不是DLL,但我认为不应该有太大区别:
class Program
{
static WindowsFormsApplication1.Form1 frm;
static void Main(string[] args)
{
frm = new WindowsFormsApplication1.Form1();
frm.textBox1.TextChanged += textBox1_TextChanged;
System.Windows.Forms.Application.Run(frm);
}
static void textBox1_TextChanged(object sender, EventArgs e)
{
Console.WriteLine((frm.textBox1.Text));
}
}
答案 1 :(得分:1)
这不会直接回答你的问题,但会以更整洁的方式解决你的问题,IMO。
在控制台应用中:
IEventProcessor processor = new ConsoleEventProcessor();
MyDll.MyClass myObj = new MyDll.MyClass(processor);
然后是以下形式:
IEventProcessor _processor;
// constructor
public MyClass(IEventProcessor processor)
{
_processor = processor;
}
public void textbox1_TextChaned(object sender, EventArgs e)
{
// pass whatever parameters you need to use in the method
_processor.ProcessText1Changed(textbox1.Text);
}