-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTouchGrid.cs
137 lines (121 loc) · 3.99 KB
/
TouchGrid.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace DataGridViewscroll
{
public class TouchGrid
{
private readonly DataGridView _View;
int startDragRowhandle = -1;
int startDragColumnhandle = -1;
int topRowIndex = -1;
int topColumnIndex = -1;
private bool _IsDragging;
public bool IsDragging
{
get { return _IsDragging; }
set { _IsDragging = value; }
}
public TouchGrid(DataGridView view)
{
_View = view;
InitViewPropertins();
}
private void InitViewPropertins()
{
_View.Cursor = Cursors.Hand;
_View.MultiSelect = false;
_View.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
_View.MouseDown += _View_MouseDown;
_View.MouseMove += _View_MouseMove;
_View.MouseUp += _View_MouseUp;
_View.Layout += new LayoutEventHandler(_View_Layout);
_View.DataError += new DataGridViewDataErrorEventHandler(_View_DataError);
}
private void _View_DataError(object sender,DataGridViewDataErrorEventArgs e)
{
}
DataGridView.HitTestInfo myHitTest;
private int GetRowUnderCursor(Point location)
{
myHitTest = _View.HitTest(location.X,location.Y);
return myHitTest.RowIndex;
}
DataGridView.HitTestInfo myHitTest2;
private int GetColumnUnderCursor(Point location)
{
myHitTest2 = _View.HitTest(location.X, location.Y);
return myHitTest2.ColumnIndex;
}
void _View_Layout(object sender,LayoutEventArgs e)
{
try {
IsDragging = false;
}
catch
{
}
}
private void DoScrollX(int delta)
{
if (delta == 0)
return;
if (delta < 0 && _View.FirstDisplayedScrollingRowIndex == 0)
delta = 0;
_View.FirstDisplayedScrollingRowIndex += delta;
}
private void DoScrollY(int delta)
{
if (delta == 0)
return;
if (delta < 0 && _View.FirstDisplayedScrollingColumnIndex == 0)
delta = 0;
_View.FirstDisplayedScrollingColumnIndex += delta;
}
private void _View_MouseUp(object sender,MouseEventArgs e)
{
try
{
IsDragging = false;
}
catch
{}
}
private void _View_MouseMove(object sender,MouseEventArgs e)
{
try
{
if (IsDragging)
{
int newRowX = GetRowUnderCursor(e.Location);
if (newRowX < 0)
return;
int deltaX = startDragRowhandle - newRowX;
DoScrollX(deltaX);
int newRowY = GetColumnUnderCursor(e.Location);
if (newRowY < 0)
return;
int deltaY = startDragColumnhandle - newRowY;
DoScrollY(deltaY);
}
}
catch{ }
}
private void _View_MouseDown(object sender, MouseEventArgs e)
{
try
{
IsDragging = true;
startDragRowhandle = GetRowUnderCursor(e.Location);
topRowIndex = _View.FirstDisplayedScrollingRowIndex;
startDragColumnhandle = GetColumnUnderCursor(e.Location);
topColumnIndex = _View.FirstDisplayedScrollingColumnIndex;
}
catch { }
}
}
}