我正在尝试为Label Control设置禁用的字体特征。我可以设置所有字体特征(大小,粗体等),但颜色被默认的窗口行为覆盖,这似乎是这两种颜色之一:
下图显示了行为 - 第1列是标签,第2列是文本框,第3列是组合框。
编辑 - 解释图像:前两行是标签,文本框和组合框的默认样式。在后两行中,我将背景颜色设置为红色,将前景颜色设置为白色。 Microsoft处理的禁用字体样式不一致。
答案 0 :(得分:2)
您是否尝试过实施EnabledChanged事件?或者您是否在控件上寻找更多“样式”属性(据我所知,它们不存在)?
答案 1 :(得分:2)
对于文本框,您可以在保持控件启用的同时将readonly属性设置为true。然后,您可以将BackColor和ForeColor属性设置为您喜欢的任何内容。用户仍然可以点击控件并使用闪烁的光标,但是他们将无法编辑任何内容。
不确定这是否会推断出其他控制类型,比如组合框等等,因为我还没有机会进行实验,但是值得一试。
答案 2 :(得分:1)
看一下ControlPaint.DrawStringDisabled方法;它可能是有用的东西。我在覆盖自定义控件的OnPaint事件时使用过它。
ControlPaint.DrawStringDisabled(g, this.Text, this.Font, Color.Transparent,
new Rectangle(CustomStringWidth, 5, StringSize2.Width, StringSize2.Height), StringFormat.GenericTypographic);
答案 3 :(得分:0)
为什么这是一个问题?
我个人会让Windows处理它。人们习惯于以某种方式禁用项目,所以如果你开始尝试改变他们看待的方式的每个方面,你可能会开始混淆你的用户。
答案 4 :(得分:0)
您可能需要覆盖Paint事件。到目前为止,我使用的所有工具包在禁用控件时都会遇到同样的问题。只是猜测他们让窗户绘制文字。至于标签,他们不是标准控件,这就是他们工作的原因。
答案 5 :(得分:0)
我使用下面的OnPaint方法覆盖了我的控件的OnPaint方法。我粘贴了整个控件类,以便于复制。
public partial class NewLabel : Label
{
public NewLabel()
{
InitializeComponent();
}
protected override void OnPaint(PaintEventArgs e)
{
TextRenderer.DrawText(e.Graphics, this.Text.ToString(), this.Font, ClientRectangle, ForeColor);
}
}