表单关闭时保存更改

use*_*542 4 c#

我在C#中有一个Windows窗体应用程序,我有一个表单,当用户关闭它时,我问,"你想保存更改吗?" 我怎样才能获得表单中的更改?这是一些代码:

public partial class DepartEdit : Form
{   
    string _nameDep; //This variavel get value textbox when form load

    {
        InitializeComponent();
    }
    private void DepartamentEdit_FormClosing(object sender, FormClosingEventArgs e)
    {


        if (txtNameDepart.Text != _nameDep && codDepartament > 0)//Here i compare
        {
            DialogResult dlg = MessageBox.Show("Save changes?", "Question", MessageBoxButtons.YesNo);

            if (dlg == DialogResult.Yes)
            {
                saveDepart(); // Metod save depart

                e.Cancel = false;

            }
            if(dlg ==DialogResult.No)
            {
                e.Cancel = false;

            }

        }        
}
Run Code Online (Sandbox Code Playgroud)

有很多文本框和组合框?有没有其他方法来获取表单中的更改?

sgm*_*ore 10

很多将取决于信息的持有地点.

如果您正在使用DataBable,那么您应该只监视listChanged事件或调用dataTable.GetChanges().

如果信息来自实现ICloneable和IComparable的类,那么您可以在初始化表单时(以及保存后)获取备份副本,并在关闭时准备您保存的类并将其与原始类进行比较.

否则你可以做类似的事情

声明一个私有变量

 private bool requiresSaving =false;
Run Code Online (Sandbox Code Playgroud)

宣布一个事件

 private void SomethingChanged(object sender, EventArgs e)
 {
      requiresSaving  = true;
 }
Run Code Online (Sandbox Code Playgroud)

将此事件连接到各种已更改的事件,例如

 this.txtNameDepart.TextChanged += new System.EventHandler(this.SomethingChanged);
Run Code Online (Sandbox Code Playgroud)

(实际事件有时被称为不同的东西,例如ValueChanged,SelectedIndexChanged,但它们都可以指向SomethingChanged,除非您需要特定事件来执行其他操作.)

关闭表单时检查此变量

private void DepartamentEdit_FormClosing(object sender, FormClosingEventArgs e)
{
    if (requiresSaving)
    {
      ....
Run Code Online (Sandbox Code Playgroud)

您还需要在saveDepart方法中设置requiresSaving false.

或者,我似乎有代码,当控件被初始化时,标签值也被设置,并且formclosing事件循环遍历每个控件并将原始值(在标签对象中)与当前值进行比较.


Shd*_*dNx 0

嗯,我认为这个理论很好。实施中存在一些问题。

    if (dlg == DialogResult.Yes)
    {
        saveDepart(); // Metod save depart

        e.Cancel = false;

    }
    if(dlg ==DialogResult.No)
    {
        e.Cancel = false;

    }
Run Code Online (Sandbox Code Playgroud)

我认为这样写会更相似:

    if(dlg == DialogResult.Yes)
    {
          saveDepart();
    }
    // You don't need to change e.Cancel to false here unless you set it to true previously.
Run Code Online (Sandbox Code Playgroud)