学习委托事件的快速简单示例

本文关键字:简单 事件 学习 | 更新日期: 2023-09-27 18:07:11

我是这个话题的新手。我创建了一个c# win表单。在这个表单中,我有两个文本框一个标签。我想做的是创建一个委托事件来跟踪文本框的变化,并将textbox1textbox2中的两个数字相加。标签将自动显示结果。希望有人能给我提供一个例子,非常感谢!我现在有些东西,

events.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Project3
{
    public delegate void Calculate(int obj1, int obj2);
    public class events
    {
        int result;
        public int Add(int x, int y)
        {
            result = x + y;
            return result;
        }
    }
}

Form1.cs:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Project3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            label1.Text ="";
        }
        private void Form1_Load(object sender, EventArgs e)
        {
        }
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
        }
        private void textBox2_TextChanged(object sender, EventArgs e)
        {
        }
    }
}

学习委托事件的快速简单示例

如果您只是想学习如何结果委托给标签,并学习delegateevent,这里有一个示例,您可能想要尝试和分析学习目的:

示例1:

public delegate int CalculateEventHandler(object obj1, object obj2);
public partial class Form1 : Form
{
    public event CalculateEventHandler Calculate;
    private string OnCalculate(string text1, string text2)
    {
        string result = "0";
        if (this.Calculate != null)
        {
            result = this.Calculate(this.textBox1.Text, this.textBox2.Text).ToString();
        }
        return result;
    }
    public Form1()
    {
        this.InitializeComponent();
        this.InitializeEvent();
    }
    private void InitializeEvent()
    {
        this.Calculate += Form1_Calculate;
    }
    private int Form1_Calculate(object obj1, object obj2)
    {
        int a = 0;
        int b = 0;
        int.TryParse(obj1.ToString(), out a);
        int.TryParse(obj2.ToString(), out b);
        return a + b;
    }
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        this.label1.Text = OnCalculate(this.textBox1.Text, this.textBox2.Text);
    }
    private void textBox2_TextChanged(object sender, EventArgs e)
    {
        this.label1.Text = OnCalculate(this.textBox1.Text, this.textBox2.Text);
    }
}

样本2:

Form1.cs

public partial class Form1 : Form
{
    public Form1()
    {
        this.InitializeComponent();
        this.InitializeEvent();
    }
    private void InitializeEvent()
    {
        Event.Calculate += Event_Calculate;
    }
    private int Event_Calculate(object obj1, object obj2)
    {
        int x = 0;
        int y = 0;
        int.TryParse(obj1.ToString(), out x);
        int.TryParse(obj2.ToString(), out y);
        return Event.Add( x, y );
    }
    private void textBox1_TextChanged(object sender, EventArgs e)
    {
        this.label1.Text = Event.OnCalculate(this.textBox1.Text, this.textBox2.Text).ToString();
    }
    private void textBox2_TextChanged(object sender, EventArgs e)
    {
        this.label1.Text = Event.OnCalculate(this.textBox1.Text, this.textBox2.Text).ToString();
    }
}

Event.cs

public delegate int CalculateEventHandler(object obj1, object obj2);
public class Event
{
    static public event CalculateEventHandler Calculate;
    static public int Add(int x, int y)
    {
        int result = x + y;
        return result;
    }
    static public int OnCalculate( object obj1, object obj2 )
    {
        int result = 0;
        if( Calculate != null )
        {
            result = Calculate(obj1, obj2);
        }
        return result;
    }
}

注意:上面的例子绝不是计算两个值的好方法,这只是一个例子。这种方法的缺点是,它会使您的代码变成意大利面条式的代码,在逻辑要去的地方来回切换。

有一个简单的解决方案

private void textBox1_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (textBox2.Text == string.Empty)
                {
                    //textBox2.Text = (0).ToString();
                    label1.Text = ( Convert.ToInt32(textBox1.Text)).ToString();
                }
                else if (textBox1.Text == string.Empty)
                {
                    label1.Text = (Convert.ToInt32(textBox2.Text)).ToString();
                }
                else
                {
                    label1.Text = (Convert.ToInt32(textBox1.Text) + Convert.ToInt32(textBox2.Text)).ToString();
                }
            }
            catch (Exception e3)
            {
                MessageBox.Show(e3.Message);
            }
        }
        private void textBox2_TextChanged(object sender, EventArgs e)
        {
            try
            {
                if (textBox2.Text == string.Empty)
                {
                    //textBox2.Text = (0).ToString();
                    label1.Text = (Convert.ToInt32(textBox1.Text)).ToString();
                }
                else if (textBox1.Text == string.Empty)
                {
                    label1.Text = (Convert.ToInt32(textBox2.Text)).ToString();
                }
                else
                {
                    label1.Text = (Convert.ToInt32(textBox1.Text) + Convert.ToInt32(textBox2.Text)).ToString();
                }
            }
            catch (Exception e3)
            {
                MessageBox.Show(e3.Message);
            }
        }