我有一个组合框,背景为包含文本框的特定颜色。我正在考虑如何帮助用户看到文本框是脏的,并认为可能更改背景组框颜色和/或在组框和/或表单文本的名称中添加“*”将是不错的。但我无法让事件甚至改变_isDirty的属性。更别说实现这个想法了。我确信有人做过类似的事情并希望你能帮助我。我正在使用C#.Net framework 2.0(它也应该在4.0中运行,但我相信这是向后兼容的)。 IDE是Visual Studios 10。
这个想法是当文本框被更改时,_isDirty“flag”/“property”将被更改,以及何时保存:
更改文本框时_isDirty = true
文本框保存后,_isDirty = false
这就是我现在所拥有的......虽然我尝试了不同的东西,包括根本不适合我的INotify ......
public static bool _isDirty = false;
private void textBox1_TextChanged(object sender, EventArgs e)
{
string newtext = textBox1.Text;
if (currentText != newtext)
{
// This solves the problem of initial text being tagged as changed text
if (currentText == "")
{
_isDirty = false;
}
else
{
//OnIsDirtyChanged();
_isDirty = true; //might have to change with the dirty marker
}
currentText = newtext;
}
}
public bool IsDirty
{
get { return _isDirty; }
set
{
if (_isDirty != value)
{
_isDirty = value;
OnIsDirtyChanged(_isDirty);
}
}
}
protected void OnIsDirtyChanged(bool _isDirty)
{
if (_isDirty == true)
{
this.Text += "*";
}
}
如果有人对我如何做到这一点有不同的建议,或者用户友好的方式做到这一点,我愿意接受建议......谢谢!
编辑:答案实际上分为两部分! BRAM给出了进行财产变更事件工作的更正。 如果您想知道如何更改背景颜色,请查看ZARATHOS的答案。 不幸的是,我只能标记一个答案,所以要标记一个主要位有效的那个。答案 0 :(得分:2)
我更喜欢将文本框背景更改为浅红色(并最终还更改文本以保持可读性),而不触及仅仅是容器元素的组框,并且应保留其完整性以避免混淆用户。如果问题出在文本框中,请突出显示文本框。
private void textBox1_TextChanged(object sender, EventArgs e)
{
string newtext = textBox1.Text;
if (currentText != newtext)
{
if (currentText == "")
{
textBox1.BackColor = SystemColors.Window;
textBox1.Font = new Font(textBox1.Font, FontStyle.Regular);
}
else
{
textBox1.BackColor = Color.LightCoral;
textBox1.Font = new Font(textBox1.Font, FontStyle.Bold);
}
currentText = newtext;
}
}
你不需要任何其他东西。
答案 1 :(得分:1)
您正在设置_isDirty,因此事件不会触发 你需要设置IsDirty。
if (currentText != newtext)
{
// This solves the problem of initial text being tagged as changed text
if (currentText == "")
{
IsDirty = false;
}
else
{
//OnIsDirtyChanged();
IsDirty = true; //might have to change with the dirty marker
}
currentText = newtext;
}
这条线错了
OnIsDirtyChanged(_isDirty);
需要
OnIsDirtyChanged(IsDirty);
假设这是通知事件。