单击另一个表单中的按钮提交时如何在c#中重新加载表单?

Posted

技术标签:

【中文标题】单击另一个表单中的按钮提交时如何在c#中重新加载表单?【英文标题】:How to reload form in c# when button submit in another form is click? 【发布时间】:2013-03-31 12:58:16 【问题描述】:

我的 C# 中有一个组合框,它位于名为 frmMain 的表单中,当我在我的设置表单中添加(使用按钮 button1_Click)一个名为 frmSettings 的产品时,它会自动填充。当我点击按钮button1_Click 我想重新加载frmMain 时,新添加的产品将可见。

我尝试过使用

frmMain main = new frmMain();
main.Close();
main.Show();

我知道这段代码很有趣,但它不起作用。 :D

这是窗体!

编辑

请查看我的程序的这张图片以便更好地理解。 这是我的frmMain

这是我的设置frmSettings 表单的样子。因此,正如您所见,当我单击提交按钮时,我想让frmMain 重新加载,以便frmMain 组合框可以看到我添加到设置中的更新值。

【问题讨论】:

是否有特殊原因要重新加载整个表单?为什么不只更新组合框? 您的意思是添加另一个按钮来更新组合框?单独的代码?但我想在我的表单中添加几个按钮,实际上我的表单中已经有一个按钮,所以如果我添加一个用于更新,就会有两个,我不喜欢我的表单加载按钮。 实际上我还有一个数据网格视图,我需要重新加载它以显示我的数据库的更新。 @NetStarter this.Refresh() 不会重置值。 是的,它不起作用。 【参考方案1】:

更新:由于您在这里更改了问题,因此是更新版本以更新您的产品

这是您的产品表单:

private frmMain main;

public frmSettings(frmMain mainForm)

  main = mainForm;
  InitializeComponent();


private void button1_Click(object sender, EventArgs e)

  main.AddProduct(textBox1.Text);

它将需要构造函数中的主窗体将数据传递给它。

以及主要形式:

private frmSettings settings;
private List<string> products = new List<string>();

public frmMain()

  InitializeComponent();
  //load products from somewhere


private void button1_Click(object sender, EventArgs e)

  if (settings == null)
  
    settings = new frmSettings(this);
  
  settings.Show();


private void UpdateForm()

  comboBoxProducts.Items.Clear();
  comboBoxProducts.Items.AddRange(products.ToArray());

  //Other updates


public void AddProduct(string product)

  products.Add(product);
  UpdateForm();

然后,您可以从表单上的任何位置调用UpdateForm(),例如另一个按钮。 此示例仅使用本地变量来存储您的产品。添加产品时也缺少某些检查,但我想你明白了......

【讨论】:

【参考方案2】:

没有这样的内置方法可以根据需要设置所有值。正如我在评论中提到的,您应该使用所有控件的所需设置创建一个方法,这里是示例代码:

private void ReloadForm()

    comboBox.ResetText();
    dataGridView.Update();   
    //and how many controls or settings you want, just add them here


private void button1_Click(object sender, EventArgs e)

    ReloadForm();   //and call that method on your button click

【讨论】:

我会尝试,但我不想重置组合框,只想重新加载它。 先试一试,再问。这只会重新加载并从项目中删除用户选择,而不是清除项目。如果要清除项目,请使用comboBox1.Items.Clear() @Jayseer “更新”是什么意思?你想提供什么行为? 我有一个单独的表单用于我的设置。 您的数据从哪里进入gridview?来自任何数据库?【参考方案3】:

试试这个代码。

this.Refresh();
Application.Doevents();

【讨论】:

【参考方案4】:
this.Refresh();
Refresh();
this.Hide();
frmScholars ss = new frmScholars();
ss.Show();

【讨论】:

【参考方案5】:
this.Close();
frmMain main = new frmMain();
main.Show();

【讨论】:

如果你简要解释你的答案而不是仅仅给出代码将会很有帮助。【参考方案6】:

您想使表单无效

http://msdn.microsoft.com/en-us/library/598t492a.aspx

【讨论】:

【参考方案7】:

如果您要从 usercontrol 刷新页面。这里是我从 usercontrol 刷新表单的示例 找到此重新加载按钮所在的表单。 然后调用无效选项卡控件并刷新它。

Dim myForm As Form = btnAuthorise.FindForm()

For Each c As Control In myForm.Controls
                If c.Name = "tabControlName" Then
                    DirectCast(c, System.Windows.Forms.TabControl).Invalidate()
                    DirectCast(c, System.Windows.Forms.TabControl).Refresh() 'force the call to the drawitem event
                End If
 Next

【讨论】:

【参考方案8】:

整个表单不需要重新加载。只需为表单初始化创建一个函数。 您可以随时调用此函数。这将刷新表单。

private void acc_Load(object sender, EventArgs e)

     form_Load();           


public void form_Load()

    // write form initialise codes example listView1.Clear();...


private void button1_Click(object sender, EventArgs e) //edit account

    //Do something then refresh form
    form_Load(); 


【讨论】:

【参考方案9】:

我认为,通过在单击按钮时调用 frmMain_load(sender,e) 应该重新加载表单。

您也可以像@Nahum 所说的那样尝试Invalidate() 表格。

【讨论】:

以上是关于单击另一个表单中的按钮提交时如何在c#中重新加载表单?的主要内容,如果未能解决你的问题,请参考以下文章

如何避免在php表单提交中重新加载页面

单击属于表单的另一个按钮时如何禁用提交表单

单击仪表板中的菜单时 C# 表单提示密码

防止在 django 中提交按钮后重新加载

根据最初检查的复选框值在后退按钮单击时重新加载 Angular 6 反应式表单

使用 Ajax、PHP、MYSQL 更新表单