2013-10-31 33 views
0

我有一個DevExpress GridControl,它有一個ContextMenuStrip,其上有兩個項目。 我希望能夠右鍵單擊GridControl中的一條記錄,並啓動用戶的默認瀏覽器,並使用默認搜索引擎搜索ContextMenu中的某個項目。獲取用戶右鍵單擊網格中的用戶在他們點擊上下文菜單中的項目之前

我的代碼:

int rowX, rowY; 

    private void genericView_MouseDown(object sender, MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Right) 
     { 
      rowX = MousePosition.X; 
      rowY = MousePosition.Y; 
     } 
    } 

    private void tsmSearch_Click(object sender, EventArgs e) 
    { 
     int key = GetRowAt(gdcErrorLogDefaultView, rowX, rowY); 

     if (key < 0) 
      return; 

     string ex = gdcErrorLogDefaultView.GetRowCellValue(key, "Exception").ToString(); 
     //Logic to launch browser & search for ex 
    } 

    public int GetRowAt(GridView view, int x, int y) 
    { 
     return view.CalcHitInfo(new Point(x, y)).RowHandle; 
    } 

我知道GetRowAt正確地計算行,我用它爲一些在我的代碼的其他地方其他用途。但是,在我的tsmSearch_Click事件中沒有正確獲取密鑰。

在測試時,我在Click事件的if語句中設置了一個斷點。 key = -2147483648。我期望0,因爲在這個特定的測試中,我的網格中只有1行。

有沒有不同的方式來實現這一目標?該網格支持多選,因此我不想通過以編程方式右鍵單擊選擇該行來「覆蓋」它們的選擇。

這裏是什麼,我試圖描述的截圖: enter image description here

回答

0

,當然還有隻要我終於決定發佈這個問題,我實現了我的問題。 MouseDown事件應該如下:

private void genericView_MouseDown(object sender, MouseEventArgs e) 
{ 
    if (e.Button == System.Windows.Forms.MouseButtons.Right) 
    { 
     rowX = e.X; 
     rowY = e.Y; 
    } 
} 
-1

我預計0,因爲這個特殊的測試有1只在我的網格

行是不正確的期待0在這種情況下。此外,-2147483648是行句柄的有效值(該值表示無效的行句柄)。 有關行手柄的更多信息,請參閱Identifying Rows and Cards幫助文章。

我相信你的情況最好是通過ColumnView.GetSelectedRows方法獲得選定行的句柄。有關更多信息,請參閱Selections Overview文檔。

相關例子:

  1. How to: Identify the Grid's Element Located Under the Mouse Cursor
  2. How to: Obtain and Modify Selected Rows
+0

感謝您的鏈接,但因此可能有用戶會選擇不右鍵單擊不選擇行。因此我需要在鼠標位置獲取該行。並且由於行索引是基於0的,爲什麼期望0會出錯? 0是第一個入口,並且只有一行。還有什麼可能呢? – sab669

+0

@ sab669行句柄不是從零開始的 - 例如任何組行的行索引是負數,新項行的行索引是-2147483647(請參閱我的鏈接中的幫助文章)。無論如何,這不是你的問題,但它可能是一個普遍的問題。正如它在Mouse Cursor例子中指定的那樣,您應該使用基於客戶端的座標進行命中測試,例如'e.Location'而不是基於屏幕的'Control.MousePosition'。 – DmitryG

+0

當然它們是基於零的。並且GetSelectedRows在Mouse Down事件觸發後纔會更新 - 在這種情況下太晚了。 – Grantly

相關問題