3

我有一个 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";
    }
}

显然没有提出任何内容..我相信我提出事件或订阅事件处理程序的方式是错误的。以及如何将事件处理程序中的文本传递回表单?

任何帮助表示赞赏..谢谢

4

1 回答 1

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我不明白的一件事是,如果您需要以相同的形式输出结果,为什么需要 a 。

我的建议是,不要创建一个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));
    }
于 2013-02-23T06:24:17.717 回答