【问题标题】:How to reload form in c# when button submit in another form is click?单击另一个表单中的按钮提交时如何在c#中重新加载表单?
【发布时间】: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() 不会重置值。
  • 是的,它不起作用。

标签: c# forms button reload


【解决方案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】:

        【讨论】:

          【解决方案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() 表格。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-07-01
                • 2019-06-24
                • 2021-11-27
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多