gpt4 book ai didi

c# - 能够在用户尝试关闭 Windows 窗体而不保存时通知用户请求 'Save Changes'

转载 作者:行者123 更新时间:2023-11-30 17:57:32 25 4
gpt4 key购买 nike

我正在使用 C# Windows 窗体 (.NET 3.5),并尝试在用户修改详细信息窗体上的任何数据边界列时实现该功能,并尝试在不保存的情况下关闭窗体,系统应该弹出我的消息“保存更改?”。

我知道我总是可以为 Textbox 等使用 TextChanged 事件,但这需要多个事件编码。我想使用一个特定的事件处理程序来检测与我的 BindingSource 关联的任何字段中的值变化。

我已经像这样限制了我的列:

textbox1.DataBindings.Add("Text", this.bindingSource1, "dbcolumn_1", true);

最佳答案

这样的东西行得通吗?

  1. 在您的表单中定义一个 changedFlag 变量,默认值 = false。

    private changedFlag = false;//表单值改变,在表单关闭时检查它

  2. 将其放入退出按钮的事件处理程序中,或适应表单关闭处理程序:

        if (this.changedFlag && MessageBox.Show("Save your changes before exit?", "Save changes?", MessageBoxButtons.OKCancel) == DialogResult.OK)
    {
    this.Save();
    }
  3. 创建一个函数,它接受一个控件容器并递归地查看其控件以连接更改处理程序(在第 4 步中定义)。

    private void AddOnChangeHandlerToInputControls(Control ctrl)
    {
    foreach (Control subctrl in ctrl.Controls)
    {
    if (subctrl is TextBox)
    {
    ((TextBox)subctrl).TextChanged += new EventHandler(InputControls_OnChange);
    }
    else if (subctrl is CheckBox)
    {
    ((CheckBox)subctrl).CheckedChanged += new EventHandler(InputControls_OnChange);
    }
    else if (subctrl is RadioButton)
    {
    ((RadioButton)subctrl).CheckedChanged += new EventHandler(InputControls_OnChange);
    }
    else if (subctrl is ListBox)
    {
    ((ListBox)subctrl).SelectedIndexChanged += new EventHandler(InputControls_OnChange);
    }
    else if (subctrl is ComboBox)
    {
    ((ComboBox)subctrl).SelectedIndexChanged += new EventHandler(InputControls_OnChange);
    }
    else
    {
    if (subctrl.Controls.Count > 0)
    {
    this.AddOnChangeHandlerToInputControls(subctrl);
    }
    }
    }
    }
  4. 创建一个设置 changedFlag = true 的通用更改处理程序函数

    private void InputControls_OnChange(object sender, EventArgs e)
    {
    this.changedFlag = true;
    }
  5. 一旦构建了控件(不确定您是否动态创建它们,但您在示例中使用了 textbox1,所以我假设没有),从步骤中调用函数3 并传入输入的容器控件。

    AddOnChangeHandlerToInputControls(panelFormContainer);

通过传入表单控件的容器,您可以避免为每个控件手动连接更改处理程序。并记得修改 Save() 函数以重置 changedFlag = false;

关于c# - 能够在用户尝试关闭 Windows 窗体而不保存时通知用户请求 'Save Changes',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13167637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com