我有两种形式 - 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中)。
知道如何解决这个问题吗?谢谢!
答案 0 :(得分:0)
删除此行:
formThreshold.ThresholdValueChanged -= new Action<int>(Threshold);
如果您只是使用.Show()调用表单,则会立即再次删除您的活动。 顺便说一下,在任何情况下都不需要这一行。