我有一个form.cs,它包含一个按钮和一个texbtox,还有一个类来处理单击按钮时引发的事件。
基本上,当单击按钮时,它应该引发一个事件,Print类中的eventHandler应该以
的形式将文本打印到TboxPrint
这就是我的代码的样子:
//Declare the delegate
public delegate void EventHandler(object sender, EventArgs e);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//event
public event EventHandler Print;
//Event caller, protected to prevent calling from other classes
protected virtual void OnPrint(System.EventArgs e)
{
if (Print != null) Print(this, e);
}
//raising event
public bool print_action(object value)
{
OnPrint(EventArgs.Empty);
return true;
}
public void BtnPrint_Click(object sender, EventArgs e)
{
PrintClass p = new PrintClass();
Form1 s = new Form1();
s.Print += p.printEventHandler;
print_action(true);
}
}
并且处理事件的方法的类是:
class PrintClass
{
public void printEventHandler(object sender, EventArgs e)
{
string text = "Print Event occured";
}
}
显然没有提出任何内容..我相信我提升事件或订阅事件处理程序的方式是错误的。以及我如何将eventhandler中的文本传回形式?
感谢任何帮助..谢谢
答案 0 :(得分:4)
您只需要extra event subscription
到Button.Click event
private void Form1_Load(object sender, EventArgs e)
{
p = new PrintClass();
button1.Click += cls.printEventHandler;
}
要处理表单上的所有按钮,您可以编写一个简单的代码段,如
public Form1()
{
InitializeComponent();
foreach (Button btn in Controls.OfType<Button>())
{
btn.Click += cls.printEventHandler;
}
}
要知道点击了哪个按钮,您可以将PrintClass
写为
class PrintClass
{
public void printEventHandler(object sender, EventArgs e)
{
Button btn = (Button) sender;
//btn.Name <-- Control name;
//btn.Text<-- Control Text;
}
}
我不理解的一件事是,如果您需要在同一表格上输出结果,为什么还需要extra class
。
我的建议是,不是为了处理所有extra class
事件而创建Button.Click
这可以按您想要的方式工作:我不再需要extra class
public Form1()
{
InitializeComponent();
foreach (Button btn in Controls.OfType<Button>())
{
btn.Click += HandleAllButtonClicks;
}
}
private void HandleAllButtonClicks(object sender, EventArgs e)
{
Button btn = (Button) sender;
TboxPrint.AppendText(String.Format("Button Clicked : Name = {0}, Text = {1}", btn.Name, btn.Text));
}