Пользовательское окно сообщения EventArgs для функции не показывает свойство из класса отправителя - PullRequest
0 голосов
/ 24 июня 2018

У меня есть класс с двумя свойствами: вес и Id.Я хочу вызвать событие, когда вес установлен.Инициируемым событием является messageBox, показывающий свойство Id.Окно сообщений отображается, но оно не включает свойство Id.

Вот весь код: https://pastebin.com/zpHn48gL

public class MyClass
{        
    //Custom type Event declaration
    public event EventHandler<Mas4TEventArgs> Info;
    decimal _weigh;
    //properties
    public string Id { get; set; }
    public decimal Weigh
    {
        get { return this._weigh; }
        set                         //When this property is changed, invoke Info Event, passing Id property to be shown on messagebox.
        {
            this._weigh= value;
            Info?.Invoke(this, new Mas4TEventArgs(this.Id));                
        }
    }    
}

public class Mas4TEventArgs : EventArgs
{        
    //constructor
    public Mas4TEventArgs(string pId) { IdArgu = pId; }        
    //property IdArgu                                          
    public string IdArgu { get; set; }
}

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

    private void button1_Click(object sender, EventArgs e)
    {

        MyClass C = new MyClass();
        //suscription
        C.Info += C_Info;                                 

        //Function to be triggered by the event
        void C_Info(object sendr, Mas4TEventArgs ev)
        {
            try
            {      //ev.IdArgu doesn't show on the messagebox.                                         
                MessageBox.Show("Evento consumido. " + " Id: " + ev.IdArgu);
            }
            catch (Exception) { }
        }

        //properties
        C.Weigh = Convert.ToDecimal(textBox1.Text);
        C.Id = TxtId.Text;
        //just to check the two properties have been parsed correctly.This works as intended.
        MessageBox.Show("Ingresado: Peso: " + C.Peso.ToString() + " Id: " + C.Id);
    }
}

или, если вы предпочитаете это: https://lpaste.net/3710707699130826752

1 Ответ

0 голосов
/ 24 июня 2018

Ваш код включает следующие ключевые строки ...

C.Weigh = Convert.ToDecimal(textBox1.Text);
C.Id = TxtId.Text;

Обратите внимание, что Id устанавливается после Weigh. Таким образом, в точке, где устанавливается значение Weigh, оно вызовет событие с тем, что было в Id, прежде чем вы установите Id на следующей строке.

Поменяйте местами две строки, чтобы сначала установить Id, и ваш код будет работать так, как вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...