//声明委托
public delegate void RefreshParentHandler<T>(T obj); //父窗体的委托
public RefreshParentHandler<op_client_add_fee> RefreshParent; //父窗体调用子窗体
frmAddCharge frm = new frmAddCharge(isUp, _SelectRow);
frm.RefreshParent += model =>
{
//方法
};
frm.RefreshIsNext += isnext =>//后台线程工作
{
_isNext = isnext;//是上一条数据还是下一条
StartTask();//开启子线程窗体数据
};
frm.Owner = this;//申明当前窗体是子窗体
frm.ShowDialog(); //子线程传递数据 就是选择查询的数据
#region 上下条数据
/// <summary>
/// 子线程
/// </summary>
private void StartTask()
{
var task = new System.Threading.Tasks.Task(() => Transmit(_isNext));
task.Start();
}
/// <summary>
/// 委托传值上下数据
/// </summary>
private void Transmit(bool isNext)
{
if (isNext)
{
for (int i = _index + ; i < DataSource.Count(); i++)
{
if (ReturnData(i))
{
return;
}
}
}
else
{
for (int i = _index - ; i >= ; i--)
{
if (ReturnData(i))
{
return;
}
}
}
if (RefreshParent != null)
{
RefreshParent(null);
}
}
private bool ReturnData(int index)
{
_SelectRow = gridView1.GetRow(index) as op_client_add_fee;
if (_SelectRow != null)
{
if (Enum.GetName(_SelectRow.fstate.GetType(), _SelectRow.fstate).Equals("未处理"))
{
if (RefreshParent != null)
{
RefreshParent(_SelectRow);
_index = index;
gridView1.ClearSelection();
gridView1.SelectRow(_index);
}
return true;
}
}
return false;
}
#endregion //子窗体注册父窗委托
//父窗只有注册一次,因为父窗资源没有释放,必须清空以前注册的委托
frmExtraCharge frm = (frmExtraCharge)this.Owner;//调用父窗体
frm.RefreshParent = null;
//注册父窗体委托
frm.RefreshParent += row => { GetSelectRow(row, ey, ey2, mess); };
if (RefreshIsNext != null)
RefreshIsNext(isNext);

效果图

父窗体的委托,子窗体注册,this.Owner是关键的更多相关文章

  1. 附实例!实现iframe父窗体与子窗体的通信

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由前端林子发表于云+社区专栏 本文主要会介绍如何基于MessengerJS,实现iframe父窗体与子窗体间的通信,传递数据信息.同时本 ...

  2. winform里操作打开在panel里的form窗体,子窗体操作同级子窗体或者父窗体的方法

    最近开始了一个winform项目,原先一直都是web项目.遇到个问题,就是在框架内,左侧和中间的main都是用panel来实现的form,就是把form窗体打开到panel里,实现左侧是导航,中间是操 ...

  3. Caliburn.Micro 关闭父窗体打开子窗体

    比如我们在做登录的时候需要关闭父窗体打开子窗体.使用Caliburn.Micro它的时候我们关闭登录窗口的时候主页面也会关闭. 解决方法就是在登录页面的CS里面写 IndexView iv = new ...

  4. C#_父窗体跟子窗体的控件操作

    很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件.相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可. 下面重点介绍前一种,目前常见 ...

  5. C# 关闭子窗体释放子窗体对象问题

    1 在主窗口中实例化子窗口 Form2 f2 = new Form2(); 2 通过按钮来显示子窗口 f2.Show(); 3 关闭子窗口而不释放子窗口对象的方法 protected override ...

  6. 界面主窗体,子窗体的InitializeComponent(构造函数)、Load事件执行顺序

    主窗体,子窗体的InitializeComponent(构造函数).Load事件执行顺序1.执行主窗体定义事件 new函数时,同时执行主窗体构造函数,默认就一个InitializeComponent函 ...

  7. 2016.6.18主窗体、子窗体InitializeComponent()事件、Load事件发生顺序以及SeleChanged事件的发生

    主窗体,子窗体的InitializeComponent(构造函数).Load事件执行顺序 1.主窗体定义事件 new 主窗体() 构造函数进入主窗体InitializeComponent函数,该函数中 ...

  8. C#之菜单控件、主窗体打开子窗体、GroupBox控件使用

    一.背景 一年前有学习过C#,但没有在项目中去实际做APP,重新捡起来应用到项目中.我同事本来做好一个CANOPEN设备管理的界面,由于近期搜索了别人的开发的界面,我觉得有很多东西要重新安排,以及我已 ...

  9. delphi 判断MDI窗体的子窗体是否存在

    //***************************************************************************//函 数名: CreateForm //返 ...

  10. 判断MDI窗体的子窗体是否存在

    //***************************************************************************//函 数名: CreateForm//返 回 ...

随机推荐

  1. FFmpeg之Linux下编译与调试

    注:下面的一切都是在 root 模式下进行的,可以不再 root 模式下进行 1. 安装linux的基础环境 基础环境就是编译代码的基础库,Ubuntu联网安装软件很简单,一个语句即可搞定,这里列出语 ...

  2. python之ActionChains方法列表

    使用方法: 方法列表: click(on_element=None) ——单击鼠标左键 click_and_hold(on_element=None) ——点击鼠标左键,不松开 context_cli ...

  3. linux系统空间不足,不重启进程,清理僵尸文件。

    问题:通过lsof |grep delete命令可以看到状态为delete的进程文件占用了较多的空间,导致系统磁盘空间不足,而du 命令看到的磁盘空间占用没那么高. 得到僵尸文件名称:catalina ...

  4. ansiblle---roles

    使用ansible中的roles来管理主机. 剧本中的roles你现在已经学过 tasks 和 handlers,那怎样组织 playbook 才是最好的方式呢?简单的回答就是:使用 roles ! ...

  5. ubuntu下如何关闭某个端口?

    1. 开启防火墙 sudo ufw enable 2. 关闭某个端口,如80端口 sudo ufw deny 80 3. 查询当前防火墙状态 sudo ufw status

  6. idea svn 主干分支切换

    使用快捷键ctrl+t或者点击工具栏中的 vcs update 出现如下窗口:点击复选框,在框2中进行选择你要切换的分支的地址,点击OK即可 : 查看是否切换成功可以再version control ...

  7. MediaPlayer 播放视频的方法

    MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.reset();//重置为初始状态 mediaPlayer.setAudioStrea ...

  8. RobotFramework的安装

    Robot Framework自动化测试框架+可视化编辑工具RIDE+Selenium2这是规范的webAPI. 一通过下载安装包安装 1)RF 框架是基于 Python 语言的,所以一定要有 Pyt ...

  9. unmix和conditional average:消混叠和条件均值

    unmix 该程序用来消除“像素混叠”.所谓像素混叠,是值在自然场景的图像中,边缘线成像到cmos的像素上时,某些像素会刚好跨在该边缘线上. 这样的像素特点就是,其R.G.B三色像素梯度值不一致.比如 ...

  10. 利用canvas对图片进行切割

    使用input标签选择一张图片, 然后利用canvas对图片进行切割, 可以设置切割的行数和列数 这是html代码 ... <input type="file" id=&qu ...