2015-05-25 45 views
0

我有2 Form1和Form2的形式。在Form1中,我有一个按钮,它将在按钮单击时打开Form2。在Form2中,它使用Form1中的标签文本进行一些设置。当关闭Form2时,Form1中的标签文本将基于该设置进行更新,但是我可以使标签文本更新。以下是更新Form1中标签文本的代码。我对文本进行了硬编码以模拟情况。强制Winform控件更新

Form1中

public void languageChange() 
     { 
      labelControl5.Text = "AAAAAA"; 
      labelControl5.Invalidate(); 
      labelControl5.Update(); 
      labelControl5.Refresh(); 
      Application.DoEvents(); 

     } 

在窗口2,我有下面的代码火languageChange功能在Form1上。

private void innoLanguage_FormClosed(object sender, FormClosedEventArgs e) 
    { 
     Main_new main = new Main_new(); 
     main.languageChange(); 
    } 

当form2关闭但它不更新标签文本时,它调用了Form1中的函数。

我觉得我犯了一个错误,但我无法弄清楚。我如何做这项工作,请帮助。

+0

您正在创建一个新的Form1,它不是打开您的Form2并且不可见的一个,尝试在构造函数中传递创建表单或在使用show或showdialog时分配拥有的表单来分配所有权。 –

回答

1

首先,当您更改其Text变量时,不需要使标签失效,它会自动重新绘制控件。

其次当Form2关闭您创建了一个新的Main_new,叫languageChange()就可以了,但后来实际上并没有显示或显示形式。我不确定情况是什么,但如果已经有Main_new表单打开,则不需要创建新表单,只需获取Form2的父级表单(这将是Main_new已经打开),然后将其作为Main_new ,然后致电languageChange()

private void innoLanguage_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    ((Main_new)this.Parent).languageChange(); 
} 

如果Main_new不打开Form2改变它,不管用什么形式的名称。

+0

嗨AlphaDelta,Main_New窗体在Form2打开时保持打开状态。我使用菜单打开Form2。当我关闭form2时,它会在Form1菜单中单击时显示错误“object not set an instance”。下面是我打开Form2的代码,new innoLanguage()。ShowDialog();什么错误? –

+0

'Menu'是打开'innoLanguage'的表单的名称吗? – AlphaDelta

+0

菜单是MenuStrip。表单名称为Main_New private void languageSettingToolStripMenuItem_Click(object sender,EventArgs e) {innoLanguage()。ShowDialog(); } –