如何禁用treenode复选框?

Breakwin

我正在使用来自codeproject的treeviewExtensions,它实现了一些iEnumerable递归,以便在检查节点时检查所有父节点和子节点。

接下来,我想为我实现一种禁用特定节点的方法。我已通过GUI将颜色设置为灰色来指示节点不可用。但是,该节点旁边的复选框仍为“已启用”,并且没有禁用/启用属性。有什么办法可以解决这个问题吗?

未禁用Node10的示例

哈拉德·科普浦斯

如果禁用TreeNode,则没有确切指定所需的内容。如果只禁用某些特殊的着色,或者如果TreeNode被禁用,是否需要具有Checked状态和子节点的着色?

因此,您想要一个具有某些特殊行为的TreeNode吗?

在OO课堂上,您了解到,如果您想要某种与其他行为几乎具有相同行为的事物,则应考虑从另一个事物派生。

class TreeNodeThatCanBeDisabled : TreeNode // TODO: invent proper name
{
    // Coloring when enabled / disabled
    public Color EnabledForeColor {get; set;} = base.ForeColor;
    public Color EnabledBackColor {get; set;} = base.BackColor;
    public Color DisabledForeColor {get; set;} = ...
    public Color DisabledBackColor {get; set;} = ...

    private bool isEnabled = true;

    public bool IsEnabled
    {
        get => this.isEnable;
        set
        {
            it (this.IsEnabled = value)
            {
                // TODO: set the colors
                this.isEnabled = value;
            }
        }
    }
}

也许您想在IsEnabled更改时引发一个事件,但不确定每个节点执行此操作是否明智:

public event EventHandler IsEnabledChanged;
protected virtual void OnEnabledChanged(EventHandle e)
{
    this.IsEnabledChanged?.Invoke(this, e);
}

在IsEnabled集中调用此函数。

此外:您想要带有复选标记的内容吗?并且是否还应该禁用所有子节点?

foreach (TreeNodeThatCanBeDisabled subNode in this.Nodes.OfType<TreeNodeThatCanBeDisabled())
{
    subNode.IsEnabled = value;
}

而且我认为您应该创建一个TreeNodeView,它可以一次启用/禁用多个TreeNode,并且可以为您提供所有Enabled / Disabled节点。

待办事项:确定此特殊的TreeNodeView是否可能仅包含可以被禁用的TreeNodes或标准TreeNodes。

class TreeNodeViewThatCanHoldTreeNodesThatCanBeDisabled : TreeNodeView // TODO: proper name
{
    // Coloring when enabled / disabled
    public Color EnabledForeColor {get; set;} = base.ForeColor;
    public Color EnabledBackColor {get; set;} = base.BackColor;
    public Color DisabledForeColor {get; set;} = ...
    public Color DisabledBackColor {get; set;} = ...

    public void AddNode(TreeNodeThatCanBeDisabled treeNode)
    {
        this.Nodes.Add(treeNode);
    }

    public IEnumerable<TreeNodeThatCanBeDisabled> TreeNodesThatCanBeDisabled =>
        base.Nodes.OfType<TreeNodeThatCanBeDisabled>();

    public IEnumerable<TreeNodeThatCanBeDisabled> DisabledNodes =>
        this.TreeNodesThatCanBeDisabled.Where(node => !node.IsEnabled);

    public void DisableAll()
    {
        foreach (var treeNode in this.TreeNodesThatCanBeDisabled)
            treeNode.Enabled = false;
    }

TODO:您只想更改颜色吗?还是复选框?折叠/展开?也许有一个事件告诉您:“嘿,伙计,这个treeNode已被禁用”?

如果有人单击禁用的TreeNode,该怎么办。它是否仍应折叠/展开,还是应保持以下状态:

protected override void OnBeforeExpand (System.Windows.Forms.TreeViewCancelEventArgs e)
{
    if (e.Node is TreeNodeThatCanBeDisabled treeNode)
    {
        // cancel expand if not enabled:
        if (!treeNode.IsEnabled)
           e.Cancel = true;
    }
}

类似崩溃?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何根据选中的复选框禁用复选框?

来自分类Dev

禁用复选框

来自分类Dev

如何动态启用禁用的复选框?

来自分类Dev

如何禁用复选框选项?

来自分类Dev

如何启用/禁用复选框

来自分类Dev

复选框后如何禁用div

来自分类Dev

GridView复选框禁用

来自分类Dev

启用-禁用复选框

来自分类Dev

如果禁用复选框,如何将图像替换复选框?

来自分类Dev

如何区分取消选中的HTML复选框和禁用的HTML复选框?

来自分类Dev

如何检查除禁用复选框之外的所有复选框?

来自分类Dev

在选中复选框之前,如何禁用按钮?

来自分类Dev

wpf datagridcheckboxcolumn:如何启用/禁用复选框

来自分类Dev

pyqt中的复选框前如何禁用按钮?

来自分类Dev

在Android中达到限制时如何禁用复选框?

来自分类Dev

如何禁用easyui-datagrid中的复选框?

来自分类Dev

如何禁用AngularJS输入中的复选框?

来自分类Dev

如何禁用Angular 6中的特定动态复选框?

来自分类Dev

执行onChange方法后如何禁用复选框?

来自分类Dev

单击复选框时如何禁用div

来自分类Dev

如何使用jQuery启用/禁用嵌套复选框

来自分类Dev

wpf datagridcheckboxcolumn:如何启用/禁用复选框

来自分类Dev

如何禁用/启用未选中的输入复选框-jQuery

来自分类Dev

如何删除所选复选框的禁用属性?

来自分类Dev

如何使复选框处于禁用状态?

来自分类Dev

如何在Internet Explorer中禁用复选框

来自分类Dev

如何禁用自定义复选框的单击事件

来自分类Dev

如何禁用按钮直到选中复选框

来自分类Dev

如何禁用具有特定类的复选框?