单击另一个表单中的按钮提交时如何在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
组合框可以看到我添加到设置中的更新值。
【问题讨论】:
是否有特殊原因要重新加载整个表单?为什么不只更新组合框? 您的意思是添加另一个按钮来更新组合框?单独的代码?但我想在我的表单中添加几个按钮,实际上我的表单中已经有一个按钮,所以如果我添加一个用于更新,就会有两个,我不喜欢我的表单加载按钮。 实际上我还有一个数据网格视图,我需要重新加载它以显示我的数据库的更新。 @NetStarterthis.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#中重新加载表单?的主要内容,如果未能解决你的问题,请参考以下文章