C# 如何在关闭另一个窗口时从窗口更新组合框?
首先,我想为以下几点道歉:C# 如何在关闭另一个窗口时从窗口更新组合框?,c#,winforms,C#,Winforms,首先,我想为以下几点道歉: 软件是葡萄牙语的 这个软件非常难看。这是一个学校项目,我们决定更多地关注功能性而不是设计(我知道,这是错误的,但我们必须选择…) 我读了,但我不明白发生了什么 也就是说,让我们来讨论这个问题 我有一扇窗户: 如果单击红色标记的按钮: 这将打开: 这应该是一个面向市场的软件。第一个窗口负责向库存订购更多物品。第二个窗口负责将供应商添加到系统中 组合框显示系统上的所有供应商。我想,当我在第二个窗口上完成添加供应商后,单击以红色矩形突出显示的按钮,组合框将自动更新
- 软件是葡萄牙语的
- 这个软件非常难看。这是一个学校项目,我们决定更多地关注功能性而不是设计(我知道,这是错误的,但我们必须选择…)
- 我读了,但我不明白发生了什么
this.tb_FornecedorTableAdapter.Fill(this.tccDataSet.tb_Fornecedor);
它起作用了,但我尝试在其他窗口的
FormClosing
、FormClosing
和Deactivate
事件上使用,但根本不起作用(我将代码上的“this”修改为很多,这对我没有帮助)。有没有办法做我想做的事 在这种情况下,您可以在子窗体上添加一个属性来存储组合框值,并在组合框值更改时填充它。另外,在子窗体上创建将从父窗体调用的方法。它将显示子窗体并返回组合框值
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();
在第一个窗口中声明公共方法:
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窗体关闭事件中
this.windowParent.RefreshCombo()
如果使用SQL Server中的数据更新组合框,则可以尝试以下操作:
// 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
}
}
我想我明白你的逻辑,但是什么样的东西会存储在“\u combovalue”上呢?第二个窗口将创建ShowAndGetComboValue()?您可以看到如何使用
\u combovalue
。是的,您是对的,ShowAndGetComboValue()
是在第二个窗口中设置的。“comboBox1.Items.AddRange(新字符串[]{“1”、“2”、“3”);“AddRange?”?我从SQL Server获取数据。。。这是个问题吗?是的,对不起,那是我的测试。我从上面的代码中删除了它。第一个代码块将全部转到第二个窗口?“private void combobox 1\u SelectedIndexChanged(object sender,EventArgs e)”在那里不起作用,因为combobox位于第一个屏幕上。。。我弄错了?你的第三段代码,你能解释一下它的功能吗?我无法理解和存储WindowA实例,因此您可以方便地在WindowB中使用该实例。请尝试此代码并进行调试,您就会理解。抱歉,我无法打开图片。是否存在异常?不,将显示此异常。这是预期的吗?您键入的是“parent”而不是“parent”,因此我认为您指的是变量而不是类是的,您是对的,我想使用该变量。试试这个。windowParent.RefreshCombo()我正在测试所有建议,但您的代码到目前为止仍然有效。谢谢D@athosbr99-以这种方式使用formAdd
会导致内存泄漏,如果在正常使用过程中多次显示,则会很明显。最好将它包装在using
子句中,比如using(var formAdd=new formAdd()){…}
。请参阅MSDN上关于在之后调用Dispose()
的说明。