网络上有几种方法,先总结如下:
调用窗体(父):FormFather,被调用窗体(子):FormSub。
方法1: 所有权法 //FormFather:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//在调用FormSub时,要把FormSub的所有者设为FormFather
FormSub f2 = new FormSub() ;
f2.Owner = this;
f2.ShowDialog() ;
//FormSub:
//在需要对其调用者(父)刷新时
FormFather f1 ;
f1 = (FormFather)this.Owner;
f1.Refresh_Method() ;
方法2:自身传递法
//FormFather:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
FormSub f2 = new FormSub() ;
f2.ShowDialog(this) ;
//FormSub:
private FormFather p_f1;
public FormSub(FormFather f1)
{
InitializeComponent();
p_f1 = f1;
}
//刷新时
p_f1.Refresh_Method() ;
方法3:属性法
//FormFather:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
FormSub f2 = new FormSub() ;
f2.P_F1 = this; //重点,赋值到子窗体对应属性
f2.Show() ;
//FormSub:
private FormFather p_f1;
public FormFather P_F1
{
get{return p_f1;}
set{p_f1 = value;}
}
//刷新时
p_f1.Refresh_Method() ;
方法4:委托法
//FormFather:
//需要有一个公共的刷新方法
public void Refresh_Method()
{
//...
}
//调用时
FormSub f2 = new FormSub() ;
f2.ShowUpdate += new DisplayUpdate(Refresh_Method) ;
f2.Show() ;
//FormSub:
//声明一个委托
public delegate void DisplayUpdate();
//声明事件
public event DisplayUpdate ShowUpdate;
//刷新时,放在需要执行刷新的事件里
if(ShowUpdate!=null) ShowUpdate();
//子窗体提交后
private void btnOK_Click(object sender, EventArgs e)
{
this.DialogResult = DialogResult.OK;
this.Close();
}
//判断子窗体
if(form.ShowDialog() == DialogResult.OK)
{
刷新父窗体中的DataGRIDVIEW数据
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)