首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> VC 教學

如何禁用 TreeView 節點 (灰色不可選) - C++ Builder 實作

     編輯:VC 教學

需求

TTreeView 無內建 Node->Enabled 屬性。需自行實現:節點字體灰色、不可選中、不可展開。

實作方案:Data 屬性作標記 + 自繪 + Changing 事件

1. 啟用/禁用輔助函數

void __fastcall SetNodeEnabled(bool Enabled, TTreeNode *Node)
{
    Node->Data = Enabled ? NULL : (void*)0xFFFF; // 標記
    Node->TreeView->Invalidate(); // 觸發重繪
}

2. OnCustomDrawItem 繪製灰色字體

void __fastcall TForm1::TreeView1CustomDrawItem(TCustomTreeView *Sender,
    TTreeNode *Node, TCustomDrawState State, bool &DefaultDraw)
{
    if ((int)Node->Data == 0xFFFF) // 禁用標記
        Sender->Canvas->Font->Color = clGray;
    // DefaultDraw = true 保持預設繪製邏輯 (僅改顏色)
}

3. OnChanging 阻止選中

void __fastcall TForm1::TreeView1Changing(TObject *Sender, TTreeNode *Node, bool &AllowChange)
{
    AllowChange = ((int)Node->Data != 0xFFFF); // 禁用則不允許切換選中
}

測試程式碼

void __fastcall TForm1::Button1Click(TObject *Sender) // 禁用當前選中節點
{
    if (TreeView1->Selected) SetNodeEnabled(false, TreeView1->Selected);
}

void __fastcall TForm1::Button2Click(TObject *Sender) // 啟用第2個節點
{
    SetNodeEnabled(true, TreeView1->Items->Item[1]);
}

// FormCreate 中展開所有節點以便測試
TreeView1->FullExpand();

效果圖

禁用節點效果圖

禁用節點顯示灰色、點擊無反應、鍵盤導航跳過。若原專案已使用 Data 屬性,可改用 StateIndex、自訂結構體指標等替代標記方式。

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