1

从数据库中检索数据后,当我单击“更新”按钮时,会出现一个消息框,显示“更改已完成。您是否喜欢继续”,带有是/否按钮。但是我只想在我进行任何更改时提出消息框。如果我没有进行任何更改,它不应该提出。请帮助我如何知道我的文本框和组合框中的更改。我的提高代码是

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.
}
4

2 回答 2

2

选项 1:在显示消息之前将旧值与新值进行比较。

选项2:在表单中添加一个成员变量dirty并注册以更改每个子控件的事件。
在事件处理程序中:检查值是否已更改。如果是这样,请将设置为 true。

选项 3:(我最喜欢。)不要做任何检查,因为维护这些检查太难了。您需要针对数据结构或子控件的每次更改更改检查。
只需从您的消息中删除“更改已完成”即可。用户自己知道他是否真的改变了他的数据。所以只要问“你想保存更改吗?”。

于 2012-11-26T12:30:45.340 回答
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;
}
于 2012-11-26T12:29:47.277 回答