eslhasani Ответов: 1

Как я могу вызвать событие описанным способом


Привет Я разработал приложение формы C# с одной кнопкой, в котором при каждом нажатии на кнопку 1 добавляется к переменной int t. Я хочу, чтобы программа дала мне сообщение, когда t=5. Коды записываются следующим образом. Но мой вопрос: как я могу завершить этот код, не написав никакого будущего кода в функции button1_Click, в" делегате событий " или другими способами?
namespace NumEv
{
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
         ++t;
        }
        ....
    }
}


Что я уже пробовал:

namespace NumEv
{
    public partial class Form1 : Form
    {
        
        public Form1()
        {
            InitializeComponent();
        }

        private void EvHppn(object sender,EvArg e)
        {
            MessageBox.Show(sender.ToString() + e.NUMget);
            label1.Text = t.ToString();
        }
        private void button1_Click(object sender, EventArgs e)
        {
            NumTstrObj.NumEv += EvHppn;
            NumTstrObj.NumTest(++t);
            NumTstrObj.NumEv -= EvHppn;
        }

        NumTstr NumTstrObj = new NumTstr();
        int t = 0;
    }

    public class EvArg : EventArgs
    {
        private int _Num;
        public EvArg(int num) { this._Num = num; }

        public int NUMget
        {
            get { return _Num; }
        }
    }

    public delegate void NumEvHndlr(object sender, EvArg e);

    class NumTstr
    {
        public event NumEvHndlr NumEv;

        public void NumTest(int n)
        {
            if (n==5 && this.NumEv != null)
                NumEv(this, new EvArg(n));
        }
        
    }

}

1 Ответов

Рейтинг:
2

JayantaChatterjee

Я думаю, что вам нужно создать класс перегрузки Operator(++) событиями..
попробовать это:-

using System;

namespace WindowsFormsApplication1
{
    class PlusPlusOperatorOver
    {
       int num;
       public event NumEvHndlr NumEv;
        public PlusPlusOperatorOver(int num)
        {
            this.num = num;
        }
        public void NumTest(int n)
        {
            if (n == 5 && this.NumEv != null)
                NumEv(this, new EvArg(n));
        }
        public static PlusPlusOperatorOver operator ++(PlusPlusOperatorOver ppo)
        {
            ppo.num++;
            ppo.NumTest(ppo.num);
            return ppo;
        }       
        public delegate void NumEvHndlr(object sender, EvArg e);
         public void Reset() {
            num = 0;
        }
    }
    public class EvArg : EventArgs
    {
        private int _Num;
        public EvArg(int num) { this._Num = num; }

        public int NUMget
        {
            get { return _Num; }
        }
    }
}

Использование в классе form:-
using System;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            plus.NumEv += new PlusPlusOperatorOver.NumEvHndlr(this.EvHppn);
        }

        private void button1_Click(object sender, EventArgs e)
        {
            plus++;
            //plus.NumEv -= this.EvHppn;
        }
        PlusPlusOperatorOver plus = new PlusPlusOperatorOver(0);
        int t = 0;
        private void EvHppn(object sender, EvArg e)
        {
            MessageBox.Show(sender.ToString() + e.NUMget);
            label1.Text = t.ToString();
            plus.Reset();            
        }

        private void button2_Click(object sender, EventArgs e)
        {
            plus++;
        }
       
    }
}


Надеюсь, это вам поможет..