Попробуйте расширить класс TreeNode и добавьте логическое свойство, которое поддерживает надлежащий selectedState. Таким образом, когда кто-то дважды щелкает узел, вы можете сбросить проверенное состояние узла обратно на значение, сохраненное в свойстве. Возможно, есть более элегантное решение, но это лучшее, что я могу придумать.

образом, у меня есть TreeView в приложении формы C # Windows. Мне нужно, чтобы некоторые узлы были «заблокированы», чтобы они не могли быть проверены (или не проверены) на основе параметра.

То, что я делаю сейчас, это:

private void tv_local_BeforeCheck(object sender, TreeViewCancelEventArgs e) {
    TNode node = (TNode)e.Node;
    //if a part node, cancel the action.
    if (node.Type == "Part") {
        e.Cancel = true;     
    }
    //if a locked node, cancel the action
    if (node.Locked == true) {
        e.Cancel = true;
    }
}

Этот код прекрасно работает при одном щелчке флажка, но если пользователь дважды щелкает по флажку, он все равно проверяет / снимает флажок.

Я пытался поиграть с событием nodeMouseDoubleClick, но это не очень помогает, так как я не могу отменить событие ...

Есть какие-нибудь идеи, как отменить событие двойного щелчка на узле? ... или что-нибудь еще? Спасибо