在使用WinForm標準的TreeView控制項的過程中,添加了如下類似的節點
parentNode1
---childNode1
---childNode2
parentNode2
---childNode1
---childNode2
當parentNode2收合的時候,雙擊parentNode2,節點會自動延伸,並且 NodeMouseDoubleClick事件會發生響應,在響應NodeMouseDoubleClick事件的時候,參數TreeNodeMouseClickEventArgs e 可能出現混亂,這主要是因為雙擊父節點的時候,會預設展開或者收合子節點,在展開或者收合子節點的時候,treeview會自動調整節點在字型中的顯示位置,如果子節點較多,位置發生了移動,那麼e.Node就不能代表雙擊的實際節點。比如說在我的程式中,雙擊parentNode2時,e.Node實際上可能是childNode1或者childNode2,因為位置不一樣而出現不同的參數。
為瞭解決這個問題,在實際編程中,應當實際避免使用e.Node,轉而使用treeViewInfo.SelectedNode來代替雙擊的節點。這就比較完美的解決了雙擊事件行為混亂的問題。下面是實際中我所使用的雙擊事件的代碼。
代碼
private void treeViewInfo_NodeMouseDoubleClick(object sender, TreeNodeMouseClickEventArgs e)
{
if(e.Button ==MouseButtons.Right)
return;
var heatRw = treeViewInfo.SelectedNode.Tag as HeatReadWrite;
if (heatRw != null)
{
HeatWriteForm hf = new HeatWriteForm(heatRw);
hf.ShowDialog();
hf.Dispose();
}
}