我在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事件循环遍历每个控件并将原始值(在标签对象中)与当前值进行比较.
嗯,我认为这个理论很好。实施中存在一些问题。
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)
| 归档时间: |
|
| 查看次数: |
19759 次 |
| 最近记录: |