3

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

我尝试使用

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

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

这是窗体!

编辑

请查看我的程序的这张图片以便更好地理解。这是我的frmMain 在此处输入图像描述

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

在此处输入图像描述

4

9 回答 9

6

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

这是您的产品形式:

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()从表单上的任何位置调用,例如另一个按钮。此示例仅使用本地变量来存储您的产品。还缺少某些添加产品的检查,但我想你明白了......

于 2013-04-09T08:08:27.500 回答
1

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

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
}
于 2013-04-09T08:02:37.857 回答
1

试试这个代码。

this.Refresh();
Application.Doevents();
于 2014-03-08T18:28:40.357 回答
1
this.Refresh();
Refresh();
this.Hide();
frmScholars ss = new frmScholars();
ss.Show();
于 2015-11-12T06:03:04.900 回答
1
this.Close();
frmMain main = new frmMain();
main.Show();
于 2020-01-24T08:59:28.817 回答
0

你想使表格无效

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

于 2013-04-09T07:48:25.377 回答
0

如果您要从 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
于 2015-03-25T12:14:32.933 回答
0

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

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(); 

}
于 2021-08-12T08:41:08.103 回答
-1

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

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

于 2016-05-27T05:10:07.643 回答