gpt4 book ai didi

c# - 防止控件在禁用时变灰

转载 作者:太空狗 更新时间:2023-10-30 00:03:58 24 4
gpt4 key购买 nike

在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com