C# 当我更改文本框的背景色时,文本框的前景色将重置,反之亦然(使用回发)
我有一个带有多行文本模式的主文本框,还有两个带有彩色文本模式的文本框,一个用于更改文本颜色,另一个用于更改主文本框的背景色 问题是,如果在更改文本颜色后更改背景颜色,则文本颜色将被黑色覆盖(我猜这是默认颜色),或者如果在更改背景颜色后更改文本颜色,则背景颜色将被白色覆盖(我猜是默认颜色) 我知道textbox值是通过回发请求发布的,但我认为ViewState应该存储textbox的控件信息。如果我为主文本框显式启用ViewState,它仍然不起作用 无论如何我可以解决这个问题。但是,为什么会这样呢 更新 我已检查此资源: 当我使用单选按钮时,它会工作。如果我使用文本框作为颜色选择器,那么它不起作用 当与设置为颜色的TextMode一起使用时,这是textbox的错误吗 以下是主文本框:C# 当我更改文本框的背景色时,文本框的前景色将重置,反之亦然(使用回发),c#,asp.net,postback,viewstate,C#,Asp.net,Postback,Viewstate,我有一个带有多行文本模式的主文本框,还有两个带有彩色文本模式的文本框,一个用于更改文本颜色,另一个用于更改主文本框的背景色 问题是,如果在更改文本颜色后更改背景颜色,则文本颜色将被黑色覆盖(我猜这是默认颜色),或者如果在更改背景颜色后更改文本颜色,则背景颜色将被白色覆盖(我猜是默认颜色) 我知道textbox值是通过回发请求发布的,但我认为ViewState应该存储textbox的控件信息。如果我为主文本框显式启用ViewState,它仍然不起作用 无论如何我可以解决这个问题。但是,为什么会这样
<asp:TextBox ID="txt_Editor"
TextMode="MultiLine"
Columns="50" Rows="10"
EnableViewState="true"
runat="server"></asp:TextBox>
您需要在隐藏字段或视图状态中捕获颜色,并在回发后进行检查。明白了,问题与文本框或视图状态无关,它是color.FromName,如果您改用ColorTranslator.FromHtml,它工作得很好,因此我认为从color.FromName返回的颜色确实无效 真是一只奇怪的虫子
编辑:好的,所以我检查了结果颜色,它不是一个真正的bug,FromName只能用于命名颜色红色、蓝色等,如果你这样使用它,它会创建一种具有这些属性值的颜色,例如{Name=6bea55,ARGB=0,0,0,0},正如您所看到的,名称前面有一个前缀,RGB值都是零,因为它无法解析它,但是如果使用转换器,它会创建一种类似于{name=ff6bea55,ARGB=255,107,234,85}的颜色,因此,HTML渲染器使用Name属性填充style属性的值,但是ViewState存储ARGB值,当您进行回发时,它会恢复这些ARGB值,因此颜色会丢失。我的主要问题是:它为什么会这样做?它应该可以工作,这个例子正是这样做的,并且有效:我已经检查过了。不完全是这样,如果我一直只更改文本颜色或背景颜色,它就可以工作了。但是,如果我先更改文本颜色,然后更改背景颜色,则文本颜色将重置,反之亦然。示例同时更改背景颜色和背景颜色,看不出区别,可能我太累了:D@Gusman你是对的,这是一样的,当我使用单选按钮时它工作,但它不与textbox textmode=color一起工作。我100%确定它是相同的代码。如果删除textmode=color并插入纯文本,它会工作吗?非常有趣的是,它会重置另一个:np,我很好奇为什么会发生这种情况:我可以问一下您是如何查看此代码的:Name=6bea55,ARGB=0,0,0,0刚刚暂停了调试器,将光标放在变量上,它将至少在VS2013中显示这些值
<div class="text-muted">Color Options:</div>
Text-color:
<asp:TextBox ID="txt_TextColor"
AutoPostBack="true" TextMode="Color"
Text="#000000" runat="server" OnTextChanged="txt_TextColor_TextChanged">
</asp:TextBox>
Background-color:
<asp:TextBox ID="txt_BackColor"
TextMode="Color" AutoPostBack="true"
Text="#FFFFFF" runat="server" OnTextChanged="txt_BackColor_TextChanged"></asp:TextBox>
protected void txt_TextColor_TextChanged(object sender, EventArgs e)
{
txt_Editor.ForeColor = Color.FromName(txt_TextColor.Text);
}
protected void txt_BackColor_TextChanged(object sender, EventArgs e)
{
txt_Editor.BackColor = Color.FromName(txt_BackColor.Text);
}