在关闭对话框窗体时刷新 winform ComboBox 数据源

Refreshing winform ComboBox datasource on closing a dialog form

我有一个设置表单,上面有一个组合框,我用数据库中的分区进行填充。在这个组合框旁边有一个 "new" 按钮,用户可以单击它来创建一个新部门。

单击“新建”按钮时,会弹出一个对话框供用户输入并保存新分区。我想让设置表单上的组合框在对话框表单关闭时刷新,但我似乎做不到。

我创建了一个函数来填充组合框:

        private void fillDivisionsCmboBox()
    {
        Divisions divs = new Divisions();
        DataTable dt = new DataTable();

        //FILL DIVISIONS DROP DOWN
        dt = divs.GetActiveDivisions();

        if (divs.Error != null)
        {
            MessageBox.Show("Error: " + divs.Error,
                "Error",
                MessageBoxButtons.OK,
                MessageBoxIcon.Error,
                MessageBoxDefaultButton.Button1);
        }
        else if (dt.Rows.Count <= 0)
        {
            MessageBox.Show("Error: No Divisions returned. Please create divisions with the \"New\" button.",
                "Divisions: Empty Reuturn",
                MessageBoxButtons.OK,
                MessageBoxIcon.Exclamation,
                MessageBoxDefaultButton.Button1);
        }
        else
        {
            this.cmbo_divisions.DataSource = dt;
            this.cmbo_divisions.DisplayMember = "title";
            this.cmbo_divisions.ValueMember = "ID";
            this.cmbo_divisions.SelectedIndex = -1;
            this.cmbo_divisions.Text = "Select a Division";

            //HANDLE UI VISIBILITY
            this.grp_divSettings.Visible = false;
        }
    }

我在设置表单的Activated事件中调用:

    private void frm_settings_Activated(object sender, EventArgs e)
    {
        fillDivisionsCmboBox();
    }

这里我从新按钮调用对话框:

        private void btn_new_division_Click(object sender, EventArgs e)
    {
        Form newdiv = new frm_new_division();
        newdiv.ShowDialog();
    }

我这样做是希望在关闭对话框时刷新组合框,但是关闭对话框时不会触发激活事件...如何实现组合框的刷新box 关闭对话框?

感谢您的宝贵时间

当您将第二个窗体显示为模态对话框时,第一个窗体中代码的执行会暂停。

因此,只需在显示第二个表单后立即调用 fillDivisionsCmboBox(),而不是在 Form.Activated 事件中调用,它会在用户关闭表单时 运行。

private void btn_new_division_Click(object sender, EventArgs e)
{
    using (var newdiv = new frm_new_division())
        newdiv.ShowDialog();

    fillDivisionsCmboBox();
}