防止控件在禁用时变灰

2024-03-27

在 winforms .net 控件中,如果我们将 Enabled 属性设置为 false,则控件将变灰。

在这种情况下,许多颜色组合将变得不可读(因为我提供了在运行时为用户更改表单颜色的选项)。

我可以使用 ReadOnly 属性,但它仅适用于 TextBox 控件,不适用于 ComboBox、DateTimePicker 等其他控件。

我只是想知道是否有任何可用选项,以便我可以防止控件在禁用时变灰。


在大多数可用性研究中,这是一个悲伤的时刻,看到受试者敲打鼠标和键盘,却不明白为什么它不起作用。但如果你真的想要的话,你可以得到它。诀窍是在控件前面放置一个图片框,显示控件先前启用状态的位图。他们永远不会发现他们点击的是位图而不是实际的控件。

最好使用面板来完成,这样您就可以轻松地禁用一组控件。将新类添加到您的项目中并粘贴下面所示的代码。编译。将新控件从工具箱顶部拖放到窗体上。并将应禁用的控件放入其中。其他一切都是自动的,只需将 Enabled 属性设置为 false,用户将不知道发生了什么:

using System;
using System.Drawing;
using System.Windows.Forms;

class FakeItPanel : Panel {
    private PictureBox mFakeIt;

    public new bool Enabled {
        get { return base.Enabled; }
        set {
            if (value) {
                if (mFakeIt != null) mFakeIt.Dispose();
                mFakeIt = null;
            }
            else {
                mFakeIt = new PictureBox();
                mFakeIt.Size = this.Size;
                mFakeIt.Location = this.Location;
                var bmp = new Bitmap(this.Width, this.Height);
                this.DrawToBitmap(bmp, new Rectangle(Point.Empty, this.Size));
                mFakeIt.Image = bmp;
                this.Parent.Controls.Add(mFakeIt);
                this.Parent.Controls.SetChildIndex(mFakeIt, 0);
            }
            base.Enabled = value;
        }
    }

    protected override void Dispose(bool disposing) {
        if (disposing && mFakeIt != null) mFakeIt.Dispose();
        base.Dispose(disposing);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止控件在禁用时变灰 的相关文章

随机推荐

  • C++ 使用不同的流读取和写入同一文件

    我有两个流指向同一个文件 第一个是std ofstream os第二个是std ifstream is 都以二进制模式打开 我在用着os创建一个新文件 文件创建过程需要我 有时 读取写入文件的数据os The is流寻找所需的位置 读取一些
  • 实体框架一对零或一对关系,没有导航属性

    由于 FK 限制 我在尝试删除记录时遇到了问题 因此 我回到了绘图板 并试图指定这种关系应该如何运作 这是我的代码第一类 public class MemberDataSet Key DatabaseGeneratedAttribute D
  • 如何在 Linux 中打开程序的多个实例

    例如 要打开多个实例gedit编辑器我写了一个像这样的shell脚本 gedit gedit gedit gedit 但是在我运行我的 shell 脚本之后 example sh 我只能找到一个 gedit 实例 我什至用过 运算符 以便
  • ObjectSpace.count_objects 中每个哈希值的含义是什么?

    在 ruby 1 9 3 中 我使用 ObjectSpace 来检查内存问题 ObjectSpace count objects 返回一个哈希值 如下所示 TOTAL gt 1004232 FREE gt 258543 T OBJECT g
  • 锁定 MongoDB 中的文档

    我在网络应用程序中使用 pymongo 并且想要执行以下形式的操作 doc collection find document doc array1 append foo for y in doc array2
  • Analysis_options.yaml 中包含多个内容?

    我想组合两个 或更多 analysis options yaml我的项目的文件 但无法找到如何做到这一点的方法 这有效 include package pedantic analysis options yaml 这也有效 include
  • 错误:‘.’令牌之前需要有不合格的 id //(结构)

    我需要制作一个程序 从用户那里获取一小部分 然后对其进行简化 我知道如何做到这一点 并且已经完成了大部分代码 但我不断收到此错误 错误 令牌之前预期有不合格的 id 我已经声明了一个名为 ReducedForm 的结构 它包含简化的分子和分
  • Python,Matplotlib,散点图,更改单击点的颜色

    我有一个带有选择器事件的简单散点图 我想更改用鼠标单击的数据点的颜色 我的代码将改变整个数组的颜色 我怎样才能改变一个特定的点 import sys import numpy as np import matplotlib pyplot a
  • 匹配集的数据结构

    我有一个应用程序 其中有很多组 一套可能是 4 7 12 18 唯一编号且全部小于 50 然后我有几个数据项 1 1 2 4 7 8 12 18 23 29 2 3 4 6 7 15 23 34 38 3 4 7 12 18 4 1 4 7
  • 二叉搜索树验证的空间复杂度

    验证二叉树是否为 BST 的最佳算法如下 IsValidBST root infinity infinity bool IsValidBST BinaryNode node int MIN int MAX if node null retu
  • 检查包含数十万张图像的目录中损坏的文件的速度逐渐变慢

    所以我有 600 000 多张图像 我估计其中大约 5 10 已损坏 我正在生成一个日志 准确记录与该图像相关的图像 使用Python 到目前为止我的方法是这样的 def img validator source files get pat
  • Android 4.1.2 对话框被调用两次

    当我调用显示对话框时 我的应用程序遇到了这个问题 不知何故它被调用了两次 这只发生在 android 4 1 及以上版本 较低版本工作正常 所以我不认为这是任何代码问题 您以前听说过 遇到过这个问题吗 这里是代码 Button edit B
  • 使用 AVAssetReader 读取视频文件时由于内存利用率高而导致应用程序崩溃

    我正在尝试使用此问题中接受的答案中的方法来读取视频帧 使用 AVPlayer 访问单个帧 https stackoverflow com questions 39570745 accesing individual frames using
  • 从 boost::shared_ptr 转换为 std::shared_ptr?

    我有一个内部使用 Boost 版本的库shared ptr并且只暴露那些 对于我的应用程序 我想使用std shared ptr只要有可能 遗憾的是 这两种类型之间没有直接转换 因为引用计数的内容取决于实现 有什么办法可以同时拥有boost
  • 我可以在 Rails 模型中定义方法吗?

    我的 Rails 模型的代码试图define method method name 模型内部 我不断得到 NoMethodError undefined method define method 我究竟做错了什么 我这样做是不是在错误的地方
  • 找不到 web api 路由属性

    我需要在我的 Web 服务中实现一个方法 该方法可通过定义的路线使用 所以我用了Route像这样的属性 Route api New public void CreateNew int id Do stuff 但是VS2013说找不到命名空间
  • Sidekiq 服务器未加载配置文件

    我正在尝试使用 sinatra 应用程序设置 sidekiq 并且我有 使用配置文件启动 sidekiq 工作程序以在守护程序模式下运行时遇到问题 我的项目具有以下结构 project config sidekiq yml Sidekiq
  • 如何在jquery中从右到左切换div

    我有这个小提琴 我试图创建一个浮动 div 它应该从右到左切换 我对 UI 很陌生 所以我的代码有点混乱 这是我的代码和FIddle https jsfiddle net KFmLv 6752 widget toggle btn click
  • Room :来自 Dao 的 LiveData 将在每次更新时触发 Observer.onChanged,即使 LiveData 值没有变化

    我发现只要数据库中的行被更新 Dao 返回的 LiveData 就会调用它的观察者 即使 LiveData 值显然没有改变 考虑如下例所示的情况 示例实体 Entity public class User public long id pu
  • 防止控件在禁用时变灰

    在 winforms net 控件中 如果我们将 Enabled 属性设置为 false 则控件将变灰 在这种情况下 许多颜色组合将变得不可读 因为我提供了在运行时为用户更改表单颜色的选项 我可以使用 ReadOnly 属性 但它仅适用于