OwnerDrawn TreeView中TreeNode.get_Handle()中的NullReference异常

时间:2013-08-05 12:21:49

标签: c# winforms treeview

我通过设置

在C#.NET中自定义了TreeVIew的外观
DrawMode=OwnerDrawAll; 

即,

OnDrawNode()  

被覆盖并成功绘制每个节点和连接线。每件事情都很好,除了,我经常得到NullReference的删除。以下是堆栈跟踪

at System.Windows.Forms.TreeNode.get_Handle()
at System.Windows.Forms.TreeNode.get_RowBounds()
at System.Windows.Forms.TreeView.CustomDraw(Message& m)
at System.Windows.Forms.TreeView.WmNotify(Message& m)
at System.Windows.Forms.TreeView.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
The message send to the WndProc during the exception is "WndProc(ref System.Windows.Forms.Message message = {msg=0x204e (WM_REFLECT + WM_NOTIFY)).

我经常遇到以下步骤的异常:

  1. 将2个带有大文本的节点添加到树视图中。
  2. 将RightToLeft和RightToLeftLayout属性设置为true。
  3. 使用“Nodes.Clear()”API删除所有节点。
  4. 再次在树状视图中添加2-3个带有大文本的节点。
  5. 有人有任何想法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

发现

TreeNode.get_Handle()

在关于自定义绘制的通知期间抛出空引用异常。我没有得到异常的原因。但是我通过处理“NM_CUSTOMDRAW”中的空引用异常来解决它 通知信息。