【Winform窗体间传值利用自定义事件产生的疑问,望各位帮忙分析】

bullnade bullnade 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
目的:
Form1中的右键菜单点击修改过后,需要将Form1中列表的id值和其它一些属性传到Form2

方法:采用自定义事件的方法

疑问:
我是一新手,对事件机制、变量生存周期不是很清楚,请各位帮忙分析问题出在哪里,谢谢~~~~

偶的代码:
1、定义一委托
public delegate void ActionEventHandle (FrmChangeArgs e);
2、定义的事件参数
public class FrmChangeArgs:System.EventArgs
{
public FrmChangeArgs(int index)
{
_index=index;
}

private int _index;
public int Index
{
get
{
return _index;
}
set
{
_index=value;
}
}
3、Form1中的代码
//定义事件
public event ActionEventHandle frmLostFocus;
protected virtual void OnfrmLostFocus(FrmChangeArgs e)
{
if (frmLostFocus!=null)
frmLostFocus(e);
}
//在右键菜单修改处调用
private void menuItem2_Click(object sender, EventArgs e)
{
string index=this.dataGrid1[this.dataGrid1.CurrentRowIndex,0].ToString();
FrmChangeArgs arg=new FrmChangeArgs(Convert.ToInt16(index));
OnfrmLostFocus(arg);
Form2 frmChild=new Form2 ();
frmChild.Owner = this;
frmChild.ShowDialog();
...
}
4、Form2的代码
private void Form2_Load(object sender, EventArgs e)
{
//注册事件
Form1 parentFrm=(Form1)this.Owner;
parentFrm.frmLostFocus += new ActionEventHandle(Form1_frmLostFocus);
if (index!=-1) //其中index是该页面私有成员,初始值为-1
{
//说明是修改页面进入
InitData();
}
...
}
private void Form1_frmLostFocus( FrmChangeArgs e)
{
index=e.Index ;
}

我在跟踪时候发现:
A)在form2中,我的index始终是-1
B)在FORM1中,我发现进入OnfrmLostFocus,frmLostFocus总是为空

请各位高手给予分析,谢谢~~~
...全文

相关推荐

C# winform窗体间传值(使用委托或事件)

C#winform窗体间传值,三种方法示例,注释详细。使用方法:使用vs2013打开编译运行即可; 工程中总共介绍了三种方法: ###方法1:通过保存对象的引用调用其方法实现对子窗体的控制; ###方法2:通过委托,在子窗体显示之前,为委托赋值,关注主窗体的数据变化,当有当有多个窗体需要接收信息,只需要为委托继续赋值(+=)即可,实现了数据传递的解耦性; ###方法3:子窗体弹出来之前,注册事件,关注主窗体消息的变化,当有多个窗体需要接收信息,,只需要分别为窗体注册数据接收事件即可,实现了数据传递的解耦性; 方法2与方法3即为发布订阅模式(观察者模式)----我也是设计模式的初学者,如有问题欢迎大家email我,谢谢;

一羽清宁

85_Qt_设置当前【控件lineEdit、widget的,非代码界面】界面的背景图片

#Volume{ background-image: url(:/new/prefix1/picture/6.png); background-repeat:no-repeat; background-position:center; }

扳手的海角

C# Winform 窗体传值及接收返回值

C# Winform 窗体传值及接收返回值 通过构造传值 通过属性传值

wspo_hi

c# winform 窗体间委托事件传值

winform 窗体间委托事件传值

流苏1990

c# WinForm 窗体之间传值的几种方式(小结)

前言 小编最近维护一个Winfrom窗体,是项目中CS端的主窗体,很多子窗体需要从主窗体获取值,同时子窗体还需要给主窗体回传值,下面来给大家介绍一下。 正文 本文中以主窗体为frmMain,子窗体为frmGroup ,两窗体之间的传值来做示例。 方式一: 使用公共静态变量传值 主窗体frmMain中代码 public partial class frmMain : Form { //声明工位ID 为公共静态变量 public static string terminalID = ; //给静态变量赋值 terminalID = q13bh01-bh12; } 子窗体

weixin_38712908
评论 7
收藏 已收藏
分享
返回顶部
bullnade
C# 111,128 成员 642,537 内容