调用窗体(父):Form1,被调用窗体(子):Form2
方法1: 所有权法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//在调用Form2时,要把Form2的所有者设为Form1
Form2 f2 = new Form2() ;
f2.Owner = this;
f2.ShowDialog() ;
//Form2:
//在需要对其调用者(父)刷新时
Form1 f1 ;
f1 = (Form1)this.Owner;
f1.Refresh_Method() ;
方法2:自身传递法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
Form2 f2 = new Form2() ;
f2.ShowDialog(this) ;
//Form2:
private Form1 p_f1;
public Form2(Form1 f1)
{
InitializeComponent();
p_f1 = f1;
}
//刷新时
p_f1.Refresh_Method() ;
方法3:属性法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
Form2 f2 = new Form2() ;
f2.P_F1 = this;
f2.Show() ;
//Form2:
private Form1 p_f1;
public Form1 P_F1
{
get{return p_f1;}
set{p_f1 = value;}
}
//刷新时
p_f1.Refresh_Method() ;
方法4:委托法
//Form1:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
Form2 f2 = new Form2() ;
f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;
f2.Show() ;
//Form2:
//声明一个委托
public delegate void DisplayUpdate();
//声明事件
public event DisplayUpdate ShowUpdate;
//刷新时,放在需要执行刷新的事件里
ShowUpdate();
最好用方法四
分享到:
相关推荐
在C# WinForm开发中,有时我们需要在子窗体中操作或更新父窗体的状态,例如刷新父窗体内容或更改父窗体上的控件值。以下两种方法详细阐述了如何实现这一目标。 **方法一:使用委托** 在这种方法中,我们通过定义一...
当用户在子窗体中进行操作后,比如编辑、添加或删除数据,通常希望在关闭子窗体时能够自动刷新父窗体,以便显示最新的数据状态。这涉及到事件处理和对象间的通信。以下是对这一主题的详细解释。 首先,我们需要了解...
**一、子窗体刷新父窗体** 1. **事件传递**:子窗体可以定义自定义事件,并在适当的时候触发这个事件。父窗体作为事件处理者,注册该事件并实现刷新逻辑。例如: ```csharp // 在子窗体中定义事件 public delegate...
### C# WinForms 子窗体刷新父窗体数据机制详解 #### 背景介绍 在C# WinForms应用程序开发中,有时我们需要实现在子窗体中对数据进行修改后,能够立即更新主窗体(父窗体)中显示的数据。这种需求常见于多级界面的...
- **定义事件处理方法**:在父窗体中定义事件处理方法,该方法会在子窗体的事件触发时执行,用于刷新父窗体的界面。 ```csharp private void ChildForm_RefreshParentFormEvent(object sender, EventArgs e) { ...
二、子窗体刷新父窗体的实现 1. 传递引用法: - 父窗体代码: ```csharp public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void ShowChildFormButton_...
总结一下,这个例子展示了在Winform C#应用程序中如何通过子窗体的关闭事件来刷新父窗体中的数据显示。关键是利用`DialogResult`属性传递信息,以及在适当的时机重新绑定数据。这种机制在多窗口交互的应用中非常常见...
4. **数据刷新**:在接收到新数据后,父窗体需要及时更新相关的控件显示。例如,如果数据传递到了TextBox,可以调用`textBox1.Text = newData;`来更新文本;如果是DataGridView,可能需要重新加载数据源或使用`...
### C#中利用委托实现子窗口关闭时通知父窗口执行特定方法 在C#中,事件和委托是非常重要的概念,特别是在处理用户界面交互时。本文将详细介绍如何利用委托(Delegate)来实现在关闭子窗口时通知父窗口执行特定的...
自身传递法是另一种简单实用的数据传递方式,它通过构造函数传递父窗体的实例到子窗体中。 **示例代码:** - **父窗体(Form1):** ```csharp public partial class Form1 : Form { public void Refresh_...
在"子窗体例程"中,你可以找到这些技术的实际应用。源代码中的注释会指导你如何将这些方法整合到自己的项目中。通过学习和理解这个示例,你不仅可以解决闪烁问题,还能掌握如何在C# Winform环境中高效管理多个窗口的...
- **MdiChildren** 和 **MdiParent**:分别获取窗体的MDI子窗体集合和MDI父窗体。 - **ShowInTaskbar**:获取或设置一个值,该值指示是否在任务栏中显示窗体图标。 - **Visible**:获取或设置一个值,该值指示窗体...
- **StartPosition属性**:确定窗体启动时的位置,例如 CenterScreen(屏幕中心)、CenterParent(父窗体中心)等。 - **Text属性**:设置窗体标题栏显示的文本。 - **Width/Height属性**:分别设定窗体的宽度和高度...
当设置为`Fill`时,控件会填充其父容器的所有空间,这通常会导致在窗体尺寸变化时出现问题,尤其是在最小化和恢复过程中。 在描述的问题中,滚动区域的空白可能是因为在窗体最小化后,`FlowLayoutPanel`的尺寸收缩...
可以设置为`CenterScreen`(居中屏幕)、`CenterParent`(居中父窗体)等。 - **Text**:此属性用于设置或获取窗体的标题文本。 - **Width/Height**:分别用于获取或设置窗体的宽度和高度。 - **Left/Top**:分别...
- **用途**:如果为`true`,当控件超出其父窗体时,父窗体会自动显示滚动条。 18. **BackColor**: 获取或设置窗体的背景颜色。 - **用途**:设置窗体的背景色。 19. **BackgroundImage**: 获取或设置窗体的背景...
如果在继承自某个基窗体的子窗体中遇到设计器加载失败的问题,可能是因为基窗体中某些属性或方法与设计器不兼容。需要检查基窗体的设计,并确保没有使用设计器不支持的特性。 **15. 不规则窗体中背景色不透明** ...