除了調用TreeNode上的.Collapse()方法或TreeView的.CollapseAll()方法外,什麼會導致TreeView崩潰?爲什麼TreeView會在WinForms中意外崩潰?
在我正在開發的應用程序中,TreeView將無法正常工作。 TreeView只維護兩個級別。當選擇父節點的子節點時,所有其他節點立即崩潰。但是,我的代碼中沒有.Collapse()或.CollapseAll()方法調用!
除了設置爲true的.LabelEdit屬性外,TreeView的所有屬性都保留默認值。在一個簡單的驗證/ MessageBox例程中,TreeView在AfterLabelEdit事件中有一些關聯的代碼。
我曾嘗試:
掛鉤 TreeView中的BeforeCollapse事件,提高 e.CancelAction標誌。
在TreeView的AfterSelect 事件中手動擴展所有節點 。 (這工作得很好作爲 實驗,但我不打算 不允許節點崩潰
乾脆!)
在代碼中的許多點,我通過TreeView控件由節點迭代,節點,以檢查屬性。但是,不會添加或刪除節點。用戶進行選擇時修改的唯一TreeNode屬性是.ImageIndex和.SelectedImageIndex。
除了上述兩個解決方案之外,我不知道可能會導致此錯誤的原因。即使沒有解決方案可以實現,任何人都可以有一個想法,以適當的方式去陷阱崩潰? (我已經嘗試設置BeforeCollapse事件中斷點,但它不會觸發,除非用戶明確地摺疊通過鼠標或鍵盤的節點。)
UPDATE:
的問題是由於換款的.SelectedImageIndex屬性在任何TreeNode上。更改此屬性會導致所有其他節點崩潰。
我嘗試過使用.BeginUpdate()和.EndUpdate()調用無效的.SelectedImageIndex屬性修改代碼。
這怎麼可以避免?
感謝您的全面回答!我能夠精確定位導致樹被重新創建的屬性,並避免在初始化過程中使用它。樹不再忘記節點狀態。 – James 2009-07-22 13:49:05
@HansPassant我知道你爲什麼回滾我的編輯?謝謝 – 2017-11-15 19:14:07