【问题标题】:How to update UI from one form to another form如何将 UI 从一种形式更新到另一种形式
【发布时间】:2016-03-07 17:40:38
【问题描述】:

我有 Form1,其中包含一个组合框,其中显示了一些保存在数据库中的数字,它还包含一个按钮 (butn2),单击时会弹出另一个表单和另一个按钮 (butn1),它会更新数据库中的组合。 在此表单(Form2,某种子表单)上,我尝试通过创建Form1 的对象来更新按钮单击时前一个表单(父表单)的组合框的数据。

但是当我打开并看到组合框时,它仍然显示相同的数据(它没有更新)。

是否可以将 UI 从组合框从一种形式更新到另一种形式?我的代码是

Form1代码:

public Form1()
{
  InitializeComponent(); 
}

Form1.Designer.cs:

Button butn1;
Button butn2;
ComboBox cmb1;
private void InitializeComponent()
 {
  cmb1 = new ComboBox();
  butn1 = new Button();
 }
this.butn1.Click += new System.EventHandler(this.button_Save_Click);
this.butn2.Click += new System.EventHandler(this.button_Save_Click2);

public void button_Save_Click(object sender, System.EventArgs e)
{
  UpdateComboBoxFromMySQL.InsertdataInCombo(this.cmb1 ); //Here i add data in combox through database, the code is correct i verfied it
}
public void button_Save_Click2(object sender, System.EventArgs e)
 {
    Form2 frm2 = new Form2();
    frm2.show();
 }

Form2代码:

Button butn2 = new Button();
//first i add some data to database, which are added i have seen the table-columns by opening DB. Now i want to update the Combobox from that data
Form1 obj1 = new Form();
this.butn2.Click += new System.EventHandler(obj1 .button_Save_Click); //It calls the function button_Save_Click, i saw on debugging but still it do not update the data.

如何通过点击 Form2 按钮更新 Form1 的这个组合框?

【问题讨论】:

  • 您可能会在此处找到一些提示:stackoverflow.com/a/5647064/93623 在该答案中,将SomeClass 视为您的第二种形式。
  • 您在 form2 代码中创建新的 form1 obj,您需要通过 Application.OpenForm 集合通过迭代表单或 Form frm123=Application.OpenForms["form1"]; 来获取 form1 的对象。 ,还要确保组合框修饰符是内部的或公共的。

标签: c# forms winforms button combobox


【解决方案1】:

假设您的第一个Form 的名称是Foobar。在这种情况下,而不是

Form1 obj1 = new Form();
this.butn2.Click += new System.EventHandler(obj1 .button_Save_Click);

创建一个新的Form 对象,你需要这个:

Form obj1 = null;
for (int i = ((obj1 == null) && (Application.OpenForms.Count - 1)); i >= 0; i--)
{
    if (Application.OpenForms[i].Name == "Foobar")
        obj1 = Application.OpenForms[i];
}
if (obj1 != null)
{
    this.butn2.Click += new System.EventHandler(obj1 .button_Save_Click);
}

解释:obj1 被初始化为null。创建一个循环来查找您要查找的Form,结束标志是完成迭代或找到Form。如果找到Form,则初始化obj1。循环之后,如果obj1被初始化,那么你就可以使用它,它的成员和方法,包括但不限于button_Save_Click

【讨论】:

  • 父表单中的组合框仍未更新? ,我已经按照你修改了我的子表单代码,但是仍然没有用更新的数据库更新父表单的组合框。
【解决方案2】:

你也可以用父form1显示form2

public void button_Save_Click2(object sender, System.EventArgs e)
 {
    Form2 frm2 = new Form2();
    frm2.Show(this);
 }

那么就可以通过form2的Owner属性访问form1了。

this.butn2.Click += new System.EventHandler(Owner.button_Save_Click);

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 1970-01-01
    • 2015-06-23
    • 2011-03-09
    • 1970-01-01
    相关资源
    最近更新 更多