当前位置:首页 > Windows程序 > 正文

winform中拖动功能实现技巧

2021-05-24 Windows程序

实现的需求,我通过拖动选中的用户行放到左边的机构节点上,,从而实现用户改变组织机构的关系

如下图

技术分享

贴代码

private DataGridViewSelectedRowCollection sourceRowCollection = null; private int rowIndexFromMouseDown; /// <summary> /// 用户拖动到机构里改变所属机构关系 /// </summary> /// <param></param> /// <param></param> private void dgvUser_MouseDown(object sender, MouseEventArgs e) { rowIndexFromMouseDown = dgvUser.HitTest(e.X, e.Y).RowIndex; if (rowIndexFromMouseDown != -1) { if (this.dgvUser.SelectedRows.Count > 0) { sourceRowCollection = this.dgvUser.SelectedRows; } } else { sourceRowCollection = null; } } private void dgvUser_MouseMove(object sender, MouseEventArgs e) { if (e.Button == MouseButtons.Left) { if (sourceRowCollection != null) { DragDropEffects effect = this.dgvUser.DoDragDrop(sourceRowCollection, DragDropEffects.Move); if (effect == DragDropEffects.Move) { //在sourceGrid中移除选中行 foreach (DataGridViewRow row in sourceRowCollection) { this.dgvUser.Rows.Remove(row); } sourceRowCollection = null; } } } } private void tvwOrganize_DragDrop(object sender, DragEventArgs e) { try { if (e.Data.GetDataPresent(typeof(DataGridViewSelectedRowCollection))) { DataGridViewSelectedRowCollection rowCollection = e.Data.GetData(typeof(DataGridViewSelectedRowCollection)) as DataGridViewSelectedRowCollection; if (rowCollection == null) { return; } string userid = (rowCollection[0].DataBoundItem as DataRowView).Row["UserID"].ToString(); string organizeid = (rowCollection[0].DataBoundItem as DataRowView).Row["OrganizeID"].ToString(); Point p = this.tvwOrganize.PointToClient(new Point(e.X, e.Y)); TreeViewHitTestInfo hitTest = tvwOrganize.HitTest(p.X, p.Y); Organize organize = hitTest.Node.Tag as Organize; if (organizeid != organize.OrganizeID && userBiz.UpdateUserOrganize(userid, organize.OrganizeID)) { e.Effect = DragDropEffects.Move; } else { e.Effect = DragDropEffects.None; } } } catch (Exception ex) { e.Effect = DragDropEffects.None; } } private void tvwOrganize_DragOver(object sender, DragEventArgs e) { if (!e.Data.GetDataPresent(typeof(DataGridViewSelectedRowCollection))) { e.Effect = DragDropEffects.None; return; } else { e.Effect = DragDropEffects.Move; //这个值会返回给DoDragDrop方法 } }

winform中拖动功能实现技巧

温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/70508.html