0

テキストボックスを含む特定の色の背景を持つグループボックスがあります。テキストボックスが汚れていることをユーザーが確認できるようにする方法を考えていました。おそらく、背景のグループボックスの色を変更したり、グループボックスやフォームテキストの名前に「*」を追加したりするとよいと思いました。しかし、_isDirtyのプロパティを変更するイベントを取得することさえできません。このアイデアを実装することは言うまでもありません。誰かが似たようなことをしたと確信しています。あなたが私を助けてくれることを願っています。私はC#.Net Framework 2.0を使用しています(4.0でも機能するはずですが、下位互換性があると思います)。IDEはVisualStudios10です。

テキストボックスが変更されると、_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 += "*";
        }
    }

誰かが私がこれをどのように行うかについて別の提案をしたり、これを行うためのより良いユーザーフレンドリーな方法を持っている場合、私は提案を受け付けています..ありがとう!

編集:答えは実際には2つの部分に分かれています!プロパティ変更イベントをWORKにするための修正は、BRAMによって行われました。背景色を変更する方法を知りたい場合は、ZARATHOSの回答をご覧ください。残念ながら、私は1つの答えしかマークできないので、メインビットが機能するようになったものにマークを付けます。

4

2 に答える 2

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

他に何も必要ありません。

于 2013-01-14T14:22:08.977 に答える
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);

それが通知イベントであると仮定します。

于 2013-01-14T14:35:00.320 に答える