我有一个包含按钮和texbox的form.cs,还有一个处理单击按钮时引发的事件的类。
基本上,当单击按钮时,它应该引发一个事件,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中的文本传递回表单?
任何帮助都将不胜感激。。感谢
您只需要和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
我的建议是,不要只为处理所有Button.Click
事件而创建extra class
这可以按照你想要的方式工作:我正在消除对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));
}