如何在关闭另一个窗口时从窗口更新ComboBox?

时间:2013-11-21 02:32:53

标签: c# winforms

首先,我想道歉:

  • 该软件是葡萄牙语。
  • 软件很丑陋。这是一个学校项目,我们决定更多地关注功能而不是设计(我知道,这是错误的,但我们必须选择......)
  • 我读过update combobox from another form in c#,但我不明白发生了什么。

那就是说,让我们谈谈这个问题。

我有这个窗口:

pretty window

如果我点击标有红色的按钮:

look the red thing

这将打开:

the other window

这应该是适用于市场的软件。第一个窗口负责向库存订购更多东西。第二个窗口负责将供应商添加到系统中。

组合框显示系统上的所有供应商。我想在单击用红色矩形突出显示的按钮后在第二个窗口添加供应商时,组合框将自动更新新数据。

我在这段代码中使用了“更新”按钮:

this.tb_FornecedorTableAdapter.Fill(this.tccDataSet.tb_Fornecedor);

虽然有效,但我尝试在其他窗口上使用FormClosingFormClosedDeactivate事件并且它根本不起作用(我修改了“this”on很多这方面的代码并没有帮助我)。有办法做我想要的吗?

3 个答案:

答案 0 :(得分:2)

在第一个窗口中声明一个公共方法:

public void RefreshCombo()
{
this.tb_FornecedorTableAdapter.Fill(this.tccDataSet.tb_Fornecedor);
}

然后在第一个窗口中添加按钮单击事件

WindowB window=new WindowB(this);
WindowB.Show();

然后在子窗口中添加一个ctor方法:

private WindowA windowParent;

public WindowB(WindowA parent)
{
InitializeComponent();
this.windowParent=parent;     
}

在WindowB FormClosing事件中

this.windowParent.RefreshCombo()

答案 1 :(得分:2)

如果使用SQL Server中的数据更新ComboBox,则可以尝试:

// When button Adicionar is clicked
private void buttonAdd_Click(object sender, EventArgs e)
{
    using(Form formAdd = new Form()) // This is the Gerenciar Fornecedor form
    {
        formAdd.ShowDialog(this); // Show the form. The next statement will not be executed until formAdd is closed
        // Put the your code to update the ComboBox items here
    }
}

答案 2 :(得分:1)

在这种情况下,您可以执行的操作是在子窗体上添加属性以存储组合框值,并在组合框值更改时填充它。此外,在子窗体上创建一个将从父窗体调用的方法。它将显示子窗体并返回组合框值。

public partial class ChildForm : Form
{
    public ChildForm()
    {
        InitializeComponent();
    }

    private string _comboValue { get; set; }

    public string ShowAndGetComboValue()
    {
        this.ShowDialog();

        return _comboValue;
    }

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        _comboValue = comboBox1.SelectedItem.ToString();
    }
}

在父表单上,您可以这样显示子表单:

ChildForm form = new ChildForm();
string comboValue = form.ShowAndGetComboValue();