zoukankan      html  css  js  c++  java
  • (转)在 ListViewItem 上拖动进行框选

    public partial class Form1 : Form
    {
            private bool IsMouseDown = false;
            Rectangle MouseRect = Rectangle.Empty;
            public Form1()
            {
                InitializeComponent();
            }
    
            private void listView1_MouseDown(object sender, MouseEventArgs e)
            {
                IsMouseDown = true;
                DrawStart(e.Location); 
            }
    
            private void listView1_MouseMove(object sender, MouseEventArgs e)
            {
                if (IsMouseDown)
                {
                    ResizeToRectangle(e.Location);
                    ListViewItem item = listView1.HitTest(e.X, e.Y).Item;
                    if (item != null)
                    {
                        item.Selected = true;
                    }
    
                    foreach (ListViewItem listViewItem in listView1.SelectedItems)
                    {
                        if ((listViewItem.Bounds.Top > MouseRect.Top && listViewItem.Bounds.Bottom > MouseRect.Top)
                            || (listViewItem.Bounds.Bottom < MouseRect.Bottom && listViewItem.Bounds.Top < MouseRect.Bottom))
                        {
                            listViewItem.Selected = false;
                        }
                    }
                }
            }
    
            private void listView1_MouseUp(object sender, MouseEventArgs e)
            {
                this.Capture = false;
                Cursor.Clip = Rectangle.Empty;
                IsMouseDown = false;
                DrawRectangle();
                MouseRect = Rectangle.Empty;
            }
    
            private void ResizeToRectangle(Point p)
            {
                DrawRectangle();
                MouseRect.Width = p.X - MouseRect.Left;
                MouseRect.Height = p.Y - MouseRect.Top;
                DrawRectangle();
            }
    
            private void DrawRectangle()
            {
                Rectangle rect = listView1.RectangleToScreen(MouseRect);
                ControlPaint.DrawReversibleFrame(rect, Color.White, FrameStyle.Dashed);
            }
    
            private void DrawStart(Point StartPoint)
            {
                this.Capture = true;
                Cursor.Clip = listView1.RectangleToScreen(new Rectangle(0, 0, ClientSize.Width, ClientSize.Height));
                MouseRect = new Rectangle(StartPoint.X, StartPoint.Y, 0, 0);
            }
        }

    转自: http://social.msdn.microsoft.com/Forums/silverlight/zh-CN/5685ef2c-7cfa-4f03-822c-4992bf6bce1c/-listviewitem-?forum=visualcshartzhchs
  • 相关阅读:
    ajax打开新窗口防止被浏览器阻止问题
    网站安全
    纠结点
    haven单词5个
    jQuery 鼠标停留样式
    js new date
    XML解析特殊字符出错
    个人对JQuery Proxy()函数的理解
    sql server 数据库 杀掉死锁进程
    转载一个:【C#4.0】中的dynamic与var的区别西南烟雨
  • 原文地址:https://www.cnblogs.com/Impulse/p/4011767.html
Copyright © 2011-2022 走看看