C# 组合框值更改时提示保存

C# 组合框值更改时提示保存,c#,winforms,datagridview,combobox,C#,Winforms,Datagridview,Combobox,我的winform中有一个datagridview和一个combobox。gridview数据将根据组合框中选择的内容进行更改。通过将网格中的comboboxcolumn检查到数据库,可以插入和删除数据。如果用户想要添加/删除数据但忘记点击save,我想提示用户是否要保存。如果进行了更改,“我的保存”功能将保存 以下是我尝试过的: 但是,这样做会在表单加载时提示用户。因为组合框中有一个默认值 private void comboBox1_SelectionChange(object sende

我的winform中有一个datagridview和一个combobox。gridview数据将根据组合框中选择的内容进行更改。通过将网格中的comboboxcolumn检查到数据库,可以插入和删除数据。如果用户想要添加/删除数据但忘记点击save,我想提示用户是否要保存。如果进行了更改,“我的保存”功能将保存

以下是我尝试过的:

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

 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事件处理程序本身来翻转标志,是因为您的combobox事件可以在导致您观察到的行为的Load事件之后触发,HandleCreated事件只有在表单第一次显示时才会触发。

请提供一个例子,好吗?请耐心听我说,我正在准备一个。我在火车上,所以有点慢。不用担心,只是好奇你会怎么做,因为我也经常遇到这个……不工作。加载表单时,我在第一个comboBox值下添加了一些记录,然后我切换到另一个comboBox值,而没有单击“保存”,它也没有提示我。@roryap还有其他建议吗?请参阅我上面的评论
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);
        }
    }
}