C# 关闭对话框窗体时刷新winform ComboBox数据源
我有一个设置表单,上面有一个组合框,我用数据库中的分区填充它。在这个组合框旁边有一个“新建”按钮,用户可以点击它来创建一个新的分区 单击“新建”按钮时,将弹出一个对话框表单供用户输入并保存新分区。我想在对话框窗体关闭时刷新设置窗体上的组合框,但我似乎无法获得它 我创建了一个函数来填充组合框:C# 关闭对话框窗体时刷新winform ComboBox数据源,c#,winforms,combobox,C#,Winforms,Combobox,我有一个设置表单,上面有一个组合框,我用数据库中的分区填充它。在这个组合框旁边有一个“新建”按钮,用户可以点击它来创建一个新的分区 单击“新建”按钮时,将弹出一个对话框表单供用户输入并保存新分区。我想在对话框窗体关闭时刷新设置窗体上的组合框,但我似乎无法获得它 我创建了一个函数来填充组合框: private void fillDivisionsCmboBox() { Divisions divs = new Divisions(); Dat
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;
}
}
在这里,我通过“新建”按钮调用对话框窗体:
private void btn_new_division_Click(object sender, EventArgs e)
{
Form newdiv = new frm_new_division();
newdiv.ShowDialog();
}
我这样做是希望它在对话框关闭时刷新组合框,但在对话框关闭时不会触发激活的事件。。。如何在关闭对话框时刷新组合框
感谢您抽出时间当您将第二个窗体显示为模式对话框时,第一个窗体中的代码执行会暂停 因此,只需在显示第二个表单后立即调用
fillDivisionsCmboBox()
,而不是在Form.Activated事件中调用,它将在用户关闭表单时运行
private void btn_new_division_Click(object sender, EventArgs e)
{
using (var newdiv = new frm_new_division())
newdiv.ShowDialog();
fillDivisionsCmboBox();
}
我现在就可以添加它。在创建新分区之前,刷新会不会导致新分区没有显示在组合框中?啊,好的,我刚刚看到你的编辑。。。非常有趣,谢谢!我马上就去试试。效果很好-谢谢!我会接受你的回答,只要选项可用。
private void btn_new_division_Click(object sender, EventArgs e)
{
using (var newdiv = new frm_new_division())
newdiv.ShowDialog();
fillDivisionsCmboBox();
}