- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在 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);
}
}
关于c# - 防止控件在禁用时变灰,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3324038/
经过很长时间的尝试,我仍然找不到解决问题的正确方法。问题是将这个灰度图像分割成 3 种不同的颜色:边界应该是黑色,边界的内部空间应该是白色,所有其他介质应该是黑色。 我尝试了几种不同的方法,包括直接强
这个问题在这里已经有了答案: What is the difference between "./somescript.sh" and ". ./somescript.sh" (4 个答案) 关闭
我是一名优秀的程序员,十分优秀!