この質問は、前の質問をさらに発展させたものです。私はC#.NET Framework 2.0、Visual Studios 10を使用しています。テキストエディターがあり、フォームのタイトルにダーティマーカー(この場合は単純な " ")を入れたいと思っています。テキストボックスが変更されている場合は、タイトルに「」が表示されます。テキストボックスが保存されると、「*」が消えます。私は次のことを試しましたが、おそらく間違っています:1つのフォーム、エディター、保存ボタンとテキストボックスがあります
---- Editor.cs
---- Functions.cs
フォームではなく、別のファイルであるFunctions.csが保存時に呼び出され、保存が実行されます(フォームコードのボタンなどを整理するために、別のファイルがダーティな作業を行います)。
--2番目の機能ファイル内からのEditor._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が変更されるかどうかに応じて、*のイベントが表示または非表示になります!どういうわけか、それは汚れをマークするためだけに機能していて、それをクリアするためには機能していません。
可能であれば助けてください、または別の方法を提案してください(サンプルコードはエースです!);)