首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

WinForms TreeView 點擊根節點後右鍵子節點 Tag 為 null?選中節點邏輯修正

     編輯:程式設計綜合問答

現象

TreeView 根節點在設計器建立,子節點動態新增並設定 Tag。右鍵點擊子節點時,treeView1.SelectedNode 仍為根節點,導致取 Tag 為 null。

原因

WinForms TreeView 預設右鍵不切換選中節點。SelectedNode 維持上次左鍵選中的節點 (根節點)。

修正:NodeMouseClick 事件中強制選中

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 節點
    }
}

設計器建立根節點的 Tag 處理

若根節點也需識別,可在 Form_Load 手動設定:rootNode.Tag = -1; 或自定義物件。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved