【问题标题】:How to use property Control.Enabled = false in order to make all control shadowed?如何使用属性 Control.Enabled = false 以使所有控件都被遮蔽?
【发布时间】:2012-09-02 19:24:57
【问题描述】:

我是这样写的:

this.myTreeView.FullRowSelect = true;
this.myTreeView.Size = new System.Drawing.Size(170, 300);

当我使用这个属性myTreeView.Enabled = false时,它变成了这样:

阴影只有树区域,而不是所有控件,如何解决这个问题? (使所有控件都被遮蔽)

【问题讨论】:

  • 这不是标准 TreeView 控件的样子。您确定使用的是 DrawMode 属性吗?让它看起来像一个不使用自定义绘图的禁用树视图,您的用户将停止抱怨。

标签: c# .net winforms controls


【解决方案1】:

这只是一个效果,但重要的是它禁用了整个控件。事实上,例如,如果您尝试,滚动条也会被禁用。但是你可以尝试使用一个肮脏的技巧来达到这个效果:

public class CostumizedTreeView : TreeView {
    Color defaultBackColor;
    public CostumizedTreeView( ) {
        defaultBackColor = BackColor;
    }

    public void Enable( bool Enabled ) {
        this.Enabled = Enabled;

        if ( !Enabled )
            BackColor = Color.LightGray;
        else
            BackColor = defaultBackColor;
    }
}

当被禁用时实现这一点:


否则,您可以使用 DevExpressTelerik 控件创建自己的自定义控件。欲了解更多信息look here

【讨论】:

    【解决方案2】:

    怎么样:

    .... Form()
    {
    this.InitializeComponent();
    
    treeView1.EnabledChanged += (s, o) =>
    {
        treeView1.BackColor = treeView1.Enabled ? Color.White : SystemColors.Control;
    };
    
    ....
    
    }
    

    【讨论】:

    • 我添加了这样的this.myTreeView.EnabledChanged += (s, o) =>...,并收到警告:The code within the method 'InitializeComponent' is generated by the designer and should not be manually modified. Please remove any changes and try opening the designer again. 我做错了什么?
    • 不要在您的 .designer.cs 文件中进行更改 - 顶部有一条警告,告诉您不要更改它。直接在您的 .cs 文件中进行更改。
    • 没错.designer.cs文件是自动生成的,所以你的代码可以被覆盖,例如在构造函数中添加代码作为更新代码@William
    猜你喜欢
    • 1970-01-01
    • 2018-07-20
    • 2012-07-26
    • 1970-01-01
    • 2017-01-16
    • 2016-08-29
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多