標籤:style class blog code ext color
近期在弄ArcgisAE實習,其中有一個功能是需要操作圖層的屬性欄位的,為了方便操作圖層的屬性,最好是在圖層的屬性工作表中,也就是在顯示圖層屬性的DataGirdView控制項的頭部添加一個右鍵菜單來實現相應的功能。
在c#中有個有一個右鍵菜單的組建contextMenuStrip,在這個控制項裡面可以添加一些處理屬性欄位的功能,然後將這個控制項賦予給DataGirdView的contextMenuStrip屬性就可以了,然而這種方式在DataGirdView控制項的任何地方都會將這個右鍵菜單顯示出來,在行中,列中都會顯示出來,這樣就沒有達到我們預期想要的效果。
於是自己再MSDN隨意的查看DataGirdView各種屬性和事件,終於發現了一個可以拼湊的方式實現DataGirdView列的右鍵菜單的方法。
DataGirdView控制項有一個ColumnHeaderMouseClick這樣的事件,這個事件只在單擊DataGirdView控制項的頭部即我們想要的地方時候才會觸發該事件,並且該事件還有一個點擊在列的一個列索引。
原理如下:
1、不使用該控制項的contextMenuStrip屬性
2、利用DataGirdView控制項的ColumnHeaderMouseClick事件,在每次觸發事件的時候在按一下滑鼠的地方將右鍵菜單用代碼的方式顯示出來。
具體代碼如下所示:
1、添加一個右鍵菜單控制項
2、在DataGirdView控制項的ColumnHeaderMouseClick寫如下的代碼
//MousePostion是相對於螢幕來的,而右鍵菜單的Show方法也是相對螢幕座標的 // MessageBox.Show(e.Location.ToString()); if (e.Button == MouseButtons.Right) { //可以擷取單擊的列的索引 int index = e.ColumnIndex; this.contextMenuStrip1.Show(MousePosition.X, MousePosition.Y); }
這樣就可以實現DataGirdView控制項中頭部(列名處)的右鍵菜單了。
ps:有幾種方式可以擷取滑鼠座標的方式,但是各自的具體含義或者說是參照原點不一樣
1、MousePosition類有一個靜態X,Y屬性,它擷取的座標是相對於螢幕的座標原點來的,也就是左上方。
2、任何控制項的滑鼠事件有個一個參數e,e有兩個X,Y資料,這個座標是相對於該控制項的座標原點的。
3、Cursor類有個靜態屬性Position,代表滑鼠當前的位置,該方式擷取的座標和MousePosition方式是一樣的,都是相對於螢幕的座標原點的。