在验证UserControl之前保留值

时间:2019-02-14 14:32:50

标签: c# winforms

我有一个属于UserControl的类:

public partial class MyObjectView : System.Windows.Forms.UserControl

此界面具有用于用户输入的各种组件。要显示我遇到的问题,只需显示一个,因此在MyObjectView.Designer.cs中:

internal System.Windows.Forms.TextBox txtMyNumber;

在MyObjectView构造函数中,我有:

this.Validating += new System.ComponentModel.CancelEventHandler(this_Validating);

然后:

private void this_Validating(object sender, System.ComponentModel.CancelEventArgs cancelEventArgs)
{

// MyObject here already contains the data entered in the control by the user
}

因此,用户输入数据并单击右上角的关闭X按钮。我想查看MyObject最初包含的内容(首次显示UserControl时)和用户在表单上输入的内容之间的区别。但是,在this_Validating中,MyObject已经被更新为用户输入的内容,因此我不再具有'before'
我该怎么做?

1 个答案:

答案 0 :(得分:1)

为什么不在构造函数中克隆原始对象,以便获得其初始状态的副本:

    class MyClass
    {
        public string Name { get; set; }

        public MyClass ShallowCopy()
        {
            return (MyClass)this.MemberwiseClone();
        }

    }


    //Copy of original state of object
    private MyClass _orig;

    public Form1()
    {
        InitializeComponent();

        //In your case this comes in via the constructor?
        MyClass o = new MyClass();
        o.Name = "hi";

        _orig = o.ShallowCopy();
 ...