在 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(使用前将#替换为@)