如果禁用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] 删除。
我来说两句