//声明委托 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 + 1; i < DataSource.Count(); i++) { if (ReturnData(i)) { return; } } } else { for (int i = _index - 1; i >= 0; 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);
效果图