设置只读文本框默认Backcolor
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设置只读文本框默认Backcolor相关的知识,希望对你有一定的参考价值。
我有一个TextBox
which设置为ReadOnly。
在某些时候,TextBox可用于编辑,并且它的BackColor发生了变化(它指示值是否有效)。
如果我想将Texbox设置回ReadOnly,则TextBox不会返回ReadOnly TextBox获取的原始BackColor。
为了再次获得原始颜色,我该怎么办?
我意识到我可以手动将颜色设置为SystemColors.Control
,但这是“正确的方法”吗?
代码示例
这是一个简单的演示代码。如果SystemColors.Control是要走的路,我将在ReadOnlyChanged
事件中更改它...
private void button1_Click(object sender, EventArgs e)
{
//At this point this.textBox1 is ReadOnly
this.textBox1.ReadOnly = false;
this.textBox1.BackColor = Color.Orange;
/*this.textBox1.BackColor = SystemColors.Control;*/ //Is this the right way?
this.textBox1.ReadOnly = true; //Textbox remains orange...
}
你必须将BackColor
设置为ReadOnly TextBox's BackColor
的外观,即Color.FromKnownColor(KnownColor.Control)
:
//this is the ReadOnlyChanged event handler for your textbox
private void textBox1_ReadOnlyChanged(object sender, EventArgs e){
if(textBox1.ReadOnly) textBox1.BackColor = Color.FromKnownColor(KnownColor.Control);
}
每次TextBox的BackColor更改时,您可能需要一个变量来存储当前的BackColor:
Color currentBackColor;
bool suppressBackColorChanged;
private void textBox1_BackColorChanged(object sender,EventArgs e){
if(suppressBackColorChanged) return;
currentBackColor = textBox1.BackColor;
}
private void textBox1_ReadOnlyChanged(object sender, EventArgs e){
suppressBackColorChanged = true;
textBox1.BackColor = textBox1.ReadOnly ? Color.FromKnownColor(KnownColor.Control) : currentBackColor;
suppressBackColorChanged = false;
}
是的,没关系。没有理由不能使用SystemColors为控件指定所需的颜色。我从未听说过WinForms
中的任何内容会导致控件在设置ReadOnly = true
时自动恢复为默认颜色。
我想一个替代方法是创建一个名为textBox1OriginalColor
或类似的类级变量,并将其设置为表单的Load
事件。然后你就知道表单最初显示时到底是什么,如果你认为某个人将来可能会将文本框的默认背景颜色设置为设计器中的蓝色等等。
我知道这是一个老问题,但为了后人的缘故:
TextBox以及许多其他控件依赖Color.Empty来决定是否显示其默认颜色。
要将TextBox设置回系统默认值(无论状态如何):
textBox1.BackColor = Color.Empty;
以上是关于设置只读文本框默认Backcolor的主要内容,如果未能解决你的问题,请参考以下文章
如何在C# winform 中对textbox 实现只读,并且不使其变灰,各位知道的提点下