1

私のプログラムは、ユーザー設定を変更して保存するように設計されています。プログラムは多くのユーザーコントロールで構成されています。少なくとも1つの未保存の変更が生成されたときに、アプリケーションを閉じる前に、設定を保存するようにユーザーにメッセージを表示する必要があります。コントロールが多すぎるため、コントロールごとにイベントを定義するのは非効率的です。それが私の問題を解決する唯一の方法であるかどうかはわかりません。何かアドバイスをお願いします。

4

2 に答える 2

0

あなたが求めていることを実行できるオプションは実際にはありません。コントロールがオブジェクトにバインドされている場合、オブジェクトがINotifyPropertyChangedを実装していると仮定すると、オブジェクトを使用して変更があるかどうかを確認できます。

TextChanged別の方法は、フラグを設定する単一のサブにマップする各コントロールにハンドラー(TextBoxなどの「変更」イベント用)をプログラムで追加することです。

于 2012-07-20T12:49:34.493 に答える
0

これは誰かにとって役立つかもしれません:

public partial class Form1 : Form
{
    public bool EditedFlag=false;

    private void Changed(object sender, EventArgs e)
    {
        EditedFlag=true;
    }

    public Form1()
    {
        InitializeComponent();            
        foreach (Control ctrl in this.Controls)
        {
            ControlEvents(ctrl);
        }
    }

    public void ControlEvents<T>(T sender)
    {            
        if (sender is TextBox) 
        {
            var obj = sender as TextBox;
            obj.TextChanged+= new EventHandler(Changed);
        }
        if (sender is CheckBox)
        {
            var obj = sender as CheckBox;
            obj.CheckedChanged += new EventHandler(Changed);
        }
        if (sender is ComboBox)
        {
            var obj = sender as ComboBox;
            obj.SelectedIndexChanged += new EventHandler(Changed);
        }

    }
}
于 2012-07-20T13:21:53.917 に答える