是什么导致WinForms richTextBox.DataBindings.Add()引发Null引用异常?

时间:2019-10-07 00:17:53

标签: c# winforms

我已经为此挠了一下头,只是想不通。我什至启动了一个全新的测试项目,无法重现我在主项目中遇到的错误。

有问题的代码是这样的:

private void FormMain_Load(object sender, EventArgs e)
{
    Binding myBinding = new Binding("Text", _gizmo, nameof(_gizmo.MyProp));
    richRmDesc.DataBindings.Add(myBinding); //NullReference exception occurs on this line
}

我已在调试器中签入。

  • myBinding不为空。
  • _gizmo是全新的Gizmo对象。它不是空的。
  • _gizmo.MyProp是一个字符串。里面有文字。
  • 即使richRmDesc.DataBindings也不为空。我可以检查所有领域 和DataBindings成员的属性没有问题。

该错误使我完全难住了。 我试图尽可能简化我的表单和启动代码,但没有完全删除我在其上构建的所有内容(接下来我将尝试尝试,但这会很缓慢且痛苦)。

有人不知道为什么当所有项目都不为null时,为什么在DataBindings行上得到Null引用异常的可能原因吗?

1 个答案:

答案 0 :(得分:1)

因此,我认为拆除表单组件将是一件大事。实际上,它只需很少的重构就非常容易(写一些抽象的代码很值得)。

在设计器生成的表单类中,我将罪魁祸首归为这一行:

this.richRmDesc.TextChanged += new System.EventHandler(this.RichDesc_TextChanged);

因此,当我查看RichDesc_TextChanged事件方法时,我发现它正在调用另一个引用空集合的方法,因为该方法尚未初始化。这是表单本身的某些逻辑。

由于某种原因,调试器完全无法向我显示该异常实际上是在TextChanged事件中发生的。甚至没有给我指示该事件正在触发的迹象,尽管在绑定后会立即触发是有道理的。

我修复了与TextChanged事件逻辑有关的初始化错误,现在一切正常。

我猜测调试器无法检测到此事件错误,因为它发生在另一个线程上???不太确定。欢迎发表评论。