在這里使用GridView的MouseDown事件。這里同樣使用的是GridHitInfo來獲取點擊位置的信息,來判斷是否在列標題上。GridHitInfo根據鼠標點擊的x、y坐標獲取該點的相關信息,判斷是否點擊在列標題行內。
private
void
gridView_MouseDown(
object
sender, MouseEventArgs e)
{
//鼠標左鍵點擊
if
(e.Button == MouseButtons.Left)
{
GridHitInfo info = gridView.CalcHitInfo(e.X, e.Y);
//在列標題欄內且列標題name是"colName"
if
(info.InColumnPanel && info.Column.Name ==
"colName"
)
{
XtraMessageBox.Show(
"點擊Name列標題!"
);
}
}
}
以上代碼很簡單,但是有個小問題,就是在該列右邊線拖動這一列的列寬時,也會彈出對話框,因為這里拖動列寬也被視為點擊鼠標。這顯然不合適。解決這個問題的辦法也很簡單,就是判斷鼠標點擊位置不在右邊線向左移動一點距離(3像素)范圍內。下面對以上代碼稍加修改,就不會再有這個問題了。
private
void
gridView_MouseDown(
object
sender, MouseEventArgs e)
{
//鼠標左鍵點擊
if
(e.Button == MouseButtons.Left)
{
GridHitInfo gridHitInfo = gridView.CalcHitInfo(e.X, e.Y);
//在列標題欄內且列標題name是"colName"
if
(gridHitInfo.InColumnPanel && gridHitInfo.Column.Name ==
"colName"
)
{
//獲取該列右邊線的x坐標
GridViewInfo gridViewInfo = (GridViewInfo)
this
.gridView.GetViewInfo();
int
x = gridViewInfo.GetColumnLeftCoord(gridHitInfo.Column) + gridHitInfo.Column.Width;
//右邊線向左移動3個像素位置不彈出對話框(實驗證明3個像素是正好的)
if
(e.X < x - 3)
{
XtraMessageBox.Show(
"點擊Name列標題!"
);
}
}
}
}
