提示保存组合框值更改

Prompting to save on comboBox value change

我的 winform 中有一个 datagridview 和一个组合框。 gridview 数据根据在组合框中选择的内容而变化。可以在网格中向数据库插入和删除数据(通过检查组合框列)。如果用户想要 add/delete 数据而忘记点击保存,我想提示用户是否要保存。如果进行了更改,我的保存功能会保存。

这是我试过的:

 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
 {
     var result = MessageBox.Show("Do you want to save your changes?", "Save", MessageBoxButtons.YesNo);
            if (result == System.Windows.Forms.DialogResult.Yes)
            {

                Save(false);
            }
}

但是,这样做会在加载表单时提示用户。 (因为组合框中有默认值)

 private void comboBox1_SelectionChange(object sender, EventArgs e)
        {

            var result = MessageBox.Show("Do you want to save your changes?", "Save", MessageBoxButtons.YesNo);
            if (result == System.Windows.Forms.DialogResult.Yes)
            {

                Save(false);
            }

        }

当我更改组合框中的值时,使用此事件会提示我,但它不会保存在我想离开的表单上,而是将网格数据保存在我要离开的表单上并离开上一个网格数据不变。我想在即将离开的网格上保存更改。

我是否需要以某种方式跟踪组合框的更改并保存在前一个更改上,如果需要,如何做?

您可以使用布尔标志值来指示您的表单已经加载并阻止您在事件处理程序中的代码在此之前 运行:

private bool _loaded = false;

我通常在 HandleCreated 事件处理程序中翻转布尔标志。

void MainForm_HandleCreated(object sender, EventArgs e)
{
    _loaded = true;
}

在负载上连接它:

private void MainForm_Load(object sender, EventArgs e)
{
    HandleCreated += MainForm_HandleCreated;
}

然后您可以将组合框处理程序更改为:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    if(_loaded)
    {
        var result = MessageBox.Show("Do you want to save your changes?", "Save", MessageBoxButtons.YesNo);
        if (result == System.Windows.Forms.DialogResult.Yes)
        {

            Save(false);
        }
    }
}

我使用 HandleCreated 事件处理程序而不是 Load 事件处理程序本身来翻转标志的原因是因为您的组合框事件可以在 Load 事件导致行为之后触发您已经观察到,HandleCreated 事件只会在表单首次显示时立即触发。