触发事件

德瑞德法官

我无法触发事件。这是我的代码。我告诉我,我想知道更改的值是此行的值:

eventvaluechange.IntValue = value;//link value as the value I want to    see change

然后,我告诉您价值变化发生时它将如何处理。

public partial class Form1 : Form
{
    int value=0;
    int value2=999;
    Val_changeInt eventvaluechange;
    public Form1()
    {
        InitializeComponent();
        eventvaluechange = new Val_changeInt();
        eventvaluechange.IntValue = value;//link value as the value I want to see change
        eventvaluechange.ValueChanged += new EventHandler(ValueHasChanged);//what I do on event
    }
    private void button1_Click(object sender, EventArgs e)
    {
        value = value +1;
    }
    private void ValueHasChanged(object sender, EventArgs e)
    {
        value2 = value;
        label1.Text = value2.ToString();
    }
    class Val_changeInt
    {
        private int valueToWatchOn;
        public event System.EventHandler ValueChanged;
        protected object _lock = new object();
        protected virtual void ValueHasChanged()
        {
            EventHandler eventvaluechange = ValueChanged;
            if (eventvaluechange != null) eventvaluechange(this, EventArgs.Empty);
        }
        public int IntValue
        {
            get { return this.valueToWatchOn; }
            set
            {
                if (value != this.valueToWatchOn)
                {//if value changed enter
                    this.valueToWatchOn = value;
                    ValueHasChanged();
                }
            }
        }
    }//Event handler for a value change

我究竟做错了什么??

非常感谢。

马尔滕

这:

eventvaluechange.IntValue = value;//link value as the value I want to see change

并非您认为的那样。之间没有链接,eventvaluechange.IntValue并且value由于它涉及值类型,因此仅复制值,因此不会复制任何引用。

要使此工作有效,您必须使用实例化的值持有者eventvaluechange,因为该实例保存的值将在值更改时触发事件。像这样:

private void button1_Click(object sender, EventArgs e)
{
    eventvaluechange.IntValue = eventvaluechange.IntValue + 1;
}
private void ValueHasChanged(object sender, EventArgs e)
{
    value2 = eventvaluechange.IntValue;
    label1.Text = value2.ToString();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章