【问题标题】:Prompting to save on comboBox value change提示保存组合框值更改
【发布时间】:2015-03-26 11:52:26
【问题描述】:

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

这是我尝试过的:

 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);
            }

        }

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

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

【问题讨论】:

    标签: c# winforms datagridview combobox


    【解决方案1】:

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

    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 事件导致您观察到的行为之后触发,并且@ 987654329@ 事件只会在第一次显示表单时触发。

    【讨论】:

    • 您能举个例子吗?
    • 请耐心等待,我正在努力。我在火车上,所以有点慢。
    • 不用担心,只是好奇你会怎么做,因为我也经常遇到这种情况
    • 嗯...不工作。当表单加载时,我在第一个组合框值下添加了几条记录,然后我切换到另一个没有点击保存,它没有提示我。
    • @roryap 还有其他建议吗? (参考我上面的评论)
    猜你喜欢
    • 2016-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多