您可以創建兩個HitTestInfo對象,一個在MouseDown
中,另一個在MouseUp
中。
IMO,你也應該使用DataGridView.HitTestInfo
類,而不是DataGrid.HitTestInfo
並儘量不叫或名稱DataGridViews
DataGrids
,這是從一個WPF
相似,但不同的控制!
DataGridView.HitTestInfo myHitTestDown, myHitTestUp;
int visibleColumnDown, visibleColumnUp;
private void dataGrid1_MouseUp(object sender, MouseEventArgs e)
{
myHitTestUp = dataGrid1.HitTest(e.X, e.Y);
visibleColumnUp = getVisibleColumn(dataGrid1, e.X);
}
private void dataGrid1_MouseDown(object sender, MouseEventArgs e)
{
myHitTestDown = dataGrid1.HitTest(e.X, e.Y);
visibleColumnDown = getVisibleColumn(dataGrid1, e.X);
}
更新:要找到後列已重新排序,只需使用一列的可見指數:
dataGrid1.Columns[myHitTestUp.ColumnIndex].DisplayIndex;
之前,我發現,我寫了這個小幫手功能,它執行相同:
int getVisibleColumn(DataGridView dgv, int x)
{
int cx = dgv.RowHeadersWidth;
int c = 0;
foreach (DataGridViewColumn col in dgv.Columns)
{
cx += col.Width; if (cx >= x) return c; c++;
}
return -1;
}
要找出哪個列被洗牌似乎有點困難。有一個事件,需要,每個列是受影響的,並且它總是首先被拖動。下面是做這件事:
創建在類級別的變量:
List<DataGridViewColumn> shuffled = new List<DataGridViewColumn>();
DataGridViewColumn shuffledColumn = null;
記住的第一列:
private void dgvLoadTable_ColumnDisplayIndexChanged(
object sender, DataGridViewColumnEventArgs e)
{
if (shuffledColumn == null) shuffledColumn = e.Column;
}
忘記發生了什麼之前:
private void dgvLoadTable_MouseDown(object sender, MouseEventArgs e)
{
shuffledColumn = null;
}
現在你可以使用它。然而,選擇列與混洗它們並不合適!如果你
shuffledColumn.Selected = true;
它只會被選中,如果SelectionMode
或者是FullColumnSelect
或ColumnHeaderSelect
- 在這兩種模式下,洗牌是行不通的,我怕..
您可以通過添加一個MouseUp事件到設計器視圖>選擇yout dgv>轉到事件>並雙擊MouseUp – Sybren 2014-10-19 10:08:07