2012-01-22 42 views
1

我有一个Win窗体应用程序(VS 2010/C#),我试图弄清楚如何刷新页面而无需刷新按钮。目前,我可以刷新页面(基本上数据绑定复位)包含的代码是这样的一个刷新按钮(this.refresh()似乎并没有出于某种原因):从另一个表单页面刷新表单页面的方法?

this.Hide(); 
AccountSettings AS = new AccountSettings(); 
AS.ShowDialog(); 

一个例子,我有是一个包含众多设置的页面,包括具有CellClick事件的数据网格。当我点击一个单元格时,我可以对数据库进行更改。我打了近一步回到设置页面,但我看到更改的唯一方法是通过按钮刷新页面。

所以它的缺点是,有没有办法从另一个表单页面刷新表单页面?例如,当我点击保存按钮或关闭子窗口时。

+0

你必须更新绑定源。网格将从那里更新自己。 –

回答

0

在winform控件上刷新重新绘制控件本身。我发现创建一个方法只需将适当的数据加载到控件中,然后根据需要调用它就很有用。 (包括表单负载)

private void ResetData() 
    { 
     //code to update settings 
    } 

如果你是显示被关闭的对话框中,你也可以利用这一点,并检查对话的状态,而不是只打开它的形式。

Form2 dlg = new Form2(); 
if (dlg.ShowDialog == System.Windows.Forms.DialogResult.OK) { 
    //code that updates your data 
    ResetData(); 
} 

如果它不是一个对话框,有一些事情可以做,以及如何应用程序工程将进行一个方法比别人更好。这只是一个例子。

如果您的更改是不需要访问其他窗口中的数据以进行更新,则可以处理您创建的表单的已关闭事件。

创建一个类级别的变量保存在打开的形式,让你也可以删除您创建的事件处理程序:

private Form2 frm; 

要创建窗体的实例,并添加关闭事件处理程序:

frm = new Form2(); 
    frm.FormClosed += OnForm2Closed; 

的事件处理方法:

private void OnForm2Closed(object sender, FormClosedEventArgs e) 
{ 
    ResetData(); 
    frm.FormClosed -= OnForm2Closed; 
} 
2

也许通过原稿伊纳勒形式作为参数传递给第二种形式:

Form2 frm2 = new Form2(this); 

并在窗体2:

Form1 frm1; 
public Form2(Form1 frm1) 
{ 
    InitializeComponent(); 
    this.frm1 = frm1; 
} 

然后在窗体2:

frm1.Update();