Avi*_*ner 8 c# textbox colors winforms
我有一个TextBox设置为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...
}
Run Code Online (Sandbox Code Playgroud)
Kin*_*ing 11
你必须设置BackColor为a的外观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);
}
Run Code Online (Sandbox Code Playgroud)
每次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;
}
Run Code Online (Sandbox Code Playgroud)
我知道这是一个老问题,但为了后代:
TextBox 以及许多其他控件依赖 Color.Empty 来决定是否显示其默认颜色。
要将 TextBox 设置回系统默认值(无论状态如何):
textBox1.BackColor = Color.Empty;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14812 次 |
| 最近记录: |