Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置只读文本框默认背景色_C#_Winforms_Colors_Textbox - Fatal编程技术网

C# 设置只读文本框默认背景色

C# 设置只读文本框默认背景色,c#,winforms,colors,textbox,C#,Winforms,Colors,Textbox,我有一个文本框,设置为只读 在某个点上,TextBox可供编辑,并且它的背景色发生变化(它指示该值是否有效)。 如果我想将TexBox设置回ReadOnly,则TextBox不会返回ReadOnlyTextBox获得的原始背景色。 我应该怎么做才能重新获得原始颜色? 我意识到我可以手动将颜色设置为SystemColors.Control,但这是“正确的方法”吗 代码示例 这是一个简单的演示代码。 如果SystemColors.Control是一种方法,我将在ReadOnlyChanged事件中更

我有一个
文本框
,设置为
只读

在某个点上,
TextBox
可供编辑,并且它的
背景色
发生变化(它指示该值是否有效)。
如果我想将
TexBox
设置回
ReadOnly
,则
TextBox
不会返回
ReadOnly
TextBox
获得的原始
背景色。
我应该怎么做才能重新获得原始颜色?
我意识到我可以手动将颜色设置为
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...
}

是的,很好。没有理由不能使用SystemColor为控件指定所需的颜色。我从未听说过在
WinForms
中有任何东西会导致控件在设置
ReadOnly=true
时自动恢复为默认颜色


我认为一种替代方法是创建一个名为
textBox1OriginalColor
的类级变量,并在表单的
Load
事件中设置它。如果您认为将来有人可能会在设计器中将文本框的默认背景色设置为蓝色或其他颜色,那么您就可以确切地知道表单最初显示时是什么颜色。

您必须将
背景色设置为
只读文本框的背景色
,即
颜色(知道颜色控制)

每次文本框的背景色更改时,您可能需要一个变量来存储当前背景色:

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;
}

我知道这是个老问题,但为了子孙后代:

TextBox和许多其他控件都依赖于颜色。Empty决定是否显示其默认颜色

要将文本框设置回系统默认值(不考虑状态):

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;
}
textBox1.BackColor = Color.Empty;