事件动作<> - >使用模态对话框时引用null

时间:2013-11-19 23:09:34

标签: c# events nullreferenceexception

我有两种形式 - frm_Main frm_Threshold 。阈值表单包含一个跟踪栏。

我需要做的就是从frm_Main打开frm_Threshold,如果轨迹栏改变,则触发frm_Main中的事件。

我找到了似乎有效的解决方案(参见代码),但是,只有从frm_Main调用frm_Threshold作为模态对话框时才会这样做。

frm_Threshold代码:

    //event to pass value of threshold if changed onto another form
    public event Action<int> ThresholdValueChanged;
    //trackbar value changed
    private void trackBarThreshold_ValueChanged(object sender, EventArgs e)
    {
        //changing value in the textbox
        textBoxThreshold.Text = trackBarThreshold.Value.ToString();
        //assignig value to the event to pass onto another form
        ThresholdValueChanged(trackBarThreshold.Value);
    }

frm_主要代码:

    private void toolStripButtonThreshold_Click(object sender, EventArgs e)
    {
        frm_Threshold formThreshold = new frm_Threshold();
        formThreshold.ThresholdValueChanged += new Action<int>(Threshold);
        formThreshold.ShowDialog();    // if changed to .Show() throws exception                 
        formThreshold.ThresholdValueChanged -= new Action<int>(Threshold);
    }

    private void Threshold(int value)
    {
       // do something
    }

如果我使用 Show()方法调用frm_Threshold表单,

上的空引用异常
  public event Action<int> ThresholdValueChanged 
抛出

(在frm_Threshold中)。

知道如何解决这个问题吗?谢谢!

1 个答案:

答案 0 :(得分:0)

删除此行:

formThreshold.ThresholdValueChanged -= new Action<int>(Threshold);

如果您只是使用.Show()调用表单,则会立即再次删除您的活动。 顺便说一下,在任何情况下都不需要这一行。