zoukankan      html  css  js  c++  java
  • winform中拖动功能实现技巧

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

    贴代码

     private DataGridViewSelectedRowCollection sourceRowCollection = null;
            private int rowIndexFromMouseDown;
    
            /// <summary>
            /// 用户拖动到机构里改变所属机构关系
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></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方法
                }
            }
  • 相关阅读:
    DHCP三种配置
    Linux-9引导过程与服务控制
    Linux系统管理10-进程和计划任务管理
    Linux系统管理11-系统安全及应用
    Linux系统管理12-Linux文件系统与日志
    ---01--Lin网络基础设置
    服务器RAID及磁盘配额的配置
    Linux常见故障及修复方法
    作业5
    104 权限 sudo 解压缩
  • 原文地址:https://www.cnblogs.com/njcxwz/p/4602500.html
Copyright © 2011-2022 走看看