从数据库中重新获取数据后,当我单击“更新”按钮时,会出现一个消息框,其中“已完成更改。您是否愿意继续”,并显示“是/否”按钮。但是,当我仅进行任何更改时,我想要提高消息框。如果我没有做任何更改,它不应该提高..请帮助我如何知道我的文本框和combox中的更改。 我提出的代码是
DialogResult result = MessageBox.Show("Chanes has done, Do you wish to save changes.?", "Message",MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
// HERE MY UPDATE CODE.
}
答案 0 :(得分:2)
选项1:在显示消息之前,将旧值与新值进行比较。
选项2:在表单中添加成员变量 dirty ,并注册以更改每个子控件的事件。
在事件处理程序中:检查值是否已更改。如果是这样,将 dirty 设置为true。
选项3:(我最喜欢的。)不要进行任何检查,因为维护这些检查太难了。您需要更改数据结构或子控件中每个更改的检查 只需从邮件中删除“已完成更改”即可。用户知道自己是否真的改变了他的数据。所以只要问“你想保存更改吗?”。
答案 1 :(得分:0)
您需要将原始值存储为字符串,然后将这些值与结果值进行比较。
或者,更简单的实现可以在文本框更改事件上将布尔isDirty
标志设置为true,并在成功更新时重置为false。
示例代码有助于突出显示以下内容:
if(ValuesHaveChanged())
{
DialogResult result = MessageBox.Show("Data has been changed, do you wish to save changes?", "Save Changes",MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (result == DialogResult.Yes)
{
// HERE MY UPDATE CODE.
ResetChangeDetection();
}
}
private bool ValuesHaveChanged()
{
return this.isDirty;
/*
return !
(
this.savedName.Equals(NameTextbox.Text)
&& this.savedAddress.Equals(AddressTextbox.Text)
)
*/
}
private void ResetChangeDetection()
{
this.isDirty = false;
//this.savedName = NameTextbox.Text;
//this.savedAddress = AddressTextbox.Text;
}