单击按钮并将其订阅到其他课程中的事件处理程序时引发事件?

问题描述:

我有一个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 subscriptionButton.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)); 
    } 
+0

的原因,我需要另一个类,我有一些数据要处理,所以当单击按钮时,它应该通知该类执行该过程并返回输出。我希望这是明确的 – Liban 2013-02-23 06:37:52

+0

@李本 - 在这种情况下,答案的上半部分将完成这项工作! – 2013-02-23 06:39:10

+0

是的,我在做这个..怎么样返回值的形式(输出到文本框)? – Liban 2013-02-23 06:47:49