原創(chuàng)|其它|編輯:郝浩|2012-10-11 14:16:01.000|閱讀 3445 次
概述:GridView有RowCellClick事件,即單元格點擊事件,但是針對列標題行以及列標題單元格卻沒有相應的事件。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
GridView有RowCellClick事件,即單元格點擊事件,但是針對列標題行以及列標題單元格卻沒有相應的事件。
在這里使用GridView的MouseDown事件。這里同樣使用的是GridHitInfo來獲取點擊位置的信息,來判斷是否在列標題上。GridHitInfo根據(jù)鼠標點擊的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列標題!"); } } } }
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網(wǎng)絡轉載