TreeView 根節點在設計器建立,子節點動態新增並設定 Tag。右鍵點擊子節點時,treeView1.SelectedNode 仍為根節點,導致取 Tag 為 null。
WinForms TreeView 預設右鍵不切換選中節點。SelectedNode 維持上次左鍵選中的節點 (根節點)。
private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e) {
if (e.Button == MouseButtons.Right) {
treeView1.SelectedNode = e.Node; // 關鍵:右鍵也選中該節點
contextMenuStrip1.Show(treeView1, e.Location);
}
}
private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) {
TreeNode node = treeView1.SelectedNode;
if (node == null) { e.Cancel = true; return; }
// 根節點無 Tag,隱藏「刪除/修改」選項
bool isRoot = (node.Parent == null);
deleteToolStripMenuItem.Visible = !isRoot;
editToolStripMenuItem.Visible = !isRoot;
addChildToolStripMenuItem.Visible = true; // 根節點可加子節點
}
private void deleteToolStripMenuItem_Click(object sender, EventArgs e) {
TreeNode node = treeView1.SelectedNode;
if (node != null && node.Tag != null) {
int id = (int)node.Tag;
// 執行資料庫刪除
node.Remove(); // 移除 UI 節點
}
}
若根節點也需識別,可在 Form_Load 手動設定:rootNode.Tag = -1; 或自定義物件。