单击按钮并将其订阅到其他课程中的事件处理程序时引发事件?
问题描述:
我有一个form.cs,其中包含一个按钮和一个texbtox,也是一个类,它处理单击按钮时引发的事件。单击按钮并将其订阅到其他课程中的事件处理程序时引发事件?
基本上,当点击该按钮时,它应该引发一个事件,并在打印类的事件处理程序应在形式
这是我的代码看起来是打印文本到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";
}
}
显然没有提出..我相信方式即提高事件或订阅到事件处理程序是错误的。以及如何将事件处理程序中的文本传回给窗体?
任何帮助表示赞赏..谢谢
答
你只需要和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));
}
的原因,我需要另一个类,我有一些数据要处理,所以当单击按钮时,它应该通知该类执行该过程并返回输出。我希望这是明确的 – Liban 2013-02-23 06:37:52
@李本 - 在这种情况下,答案的上半部分将完成这项工作! – 2013-02-23 06:39:10
是的,我在做这个..怎么样返回值的形式(输出到文本框)? – Liban 2013-02-23 06:47:49