脏标记打开和关闭,取决于属性值(2种形式)
本文关键字:属性 2种 取决于 | 更新日期: 2023-09-27 17:53:26
这个问题是对上一个问题的进一步发展。我正在使用c# . net框架2.0,Visual studio 10。我有一个文本编辑器,我想在表单标题上有一个肮脏的标记,在这种情况下,一个简单的""。如果文本框已经更改,那么""应该出现在标题中。保存文本框后,"*"应该会消失。我尝试了以下方法,但可能不正确:1 .表单,编辑器,有保存按钮和文本框
——Editor.cs
——Functions.cs
一个不同的文件,而不是一个表单,Functions.cs,在save执行保存时被调用(为了保持整洁,表单代码中只有按钮等,而另一个文件完成脏工作)
——改变编辑器。_isDirty值来自第二个函数文件——修改编辑器文件本身的_isDirty值-从编辑器内更改IsDirty(我不知道如何从函数文件中做到这一点)
,下面是相关代码:
public static bool _isDirty = false;
public plainTextEditor()
{
InitializeComponent();
functionsProxy = new Functions();
IsDirty = false;
}
/* Property added to flag Changed _isDirty event */
public bool IsDirty
{
get { return _isDirty; }
set
{
if (_isDirty != value)
{
_isDirty = value;
OnIsDirtyChanged(IsDirty);
}
}
}
protected void OnIsDirtyChanged(bool _isDirty)
{
if (_isDirty == true)
{
//textBox1.BackColor = Color.LightCoral;
this.Text += "*";
}
else
{
this.Text = "Text Editor";
//textBox1.BackColor = SystemColors.Window;
}
}
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 == "")
{
//textBox1.BackColor = SystemColors.Window;
IsDirty = false;
}
else
{
IsDirty = true;
}
currentText = newtext;
}
}
private void btnSave_Click(object sender, EventArgs e)
{
functionsProxy.doSave(textBox1.Text);
//_isDirty = false;
IsDirty = false;
}
现在,根据我对事件和属性的了解…如果我甚至改变_isDirty的值,OnIsDirty应该被调用和改变,对吗?无论我在哪里更改_isDirty的值,都说它来自不同的形式。这就是我想要的。事件*的出现或消失取决于_isDirty是否改变!不知何故,它只能标记脏的,而不能清除它。
请帮助,如果你可以,或建议另一种方法(示例代码将是王牌!);)
您的代码中有几个问题。其中之一是方法中静态成员和参数的混淆。我试着修改代码。这是我给你的建议:
private bool _isDirty = false;
public plainTextEditor()
{
InitializeComponent();
functionsProxy = new Functions();
IsDirty = false;
}
/* Property added to flag Changed _isDirty event */
public bool IsDirty
{
get { return _isDirty; }
set
{
if (_isDirty != value)
{
_isDirty = value;
OnIsDirtyChanged();
}
}
}
private void OnIsDirtyChanged()
{
if (_isDirty == true)
{
//textBox1.BackColor = Color.LightCoral;
this.Text += "*";
}
else
{
this.Text = "Text Editor";
//textBox1.BackColor = SystemColors.Window;
}
}
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 == "")
{
//textBox1.BackColor = SystemColors.Window;
IsDirty = false;
}
else
{
IsDirty = true;
}
currentText = newtext;
}
}
private void btnSave_Click(object sender, EventArgs e)
{
functionsProxy.doSave(textBox1.Text);
IsDirty = false;
}
保持"_isDirty"为表单私有。您已经通过属性IsDirty公开了Dirty状态。如果您不希望表单外部的任何代码更改IsDirty,那么将setter ("set")设为私有。现在您的代码应该可以运行了。