0

我有一个 DevExpress GridControlContextMenuStrip上面有 2 个项目。我希望能够右键单击 中的记录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 事件中正确获取密钥。

在测试时,我if在 Click 事件中的语句上设置了一个断点。key= -2147483648。我希望为 0,因为在这个特定的测试中,我的网格中只有 1 行。

有没有不同的方法来实现这一目标?网格支持多选,所以我不想通过在右键单击时以编程方式选择行来“覆盖”他们的选择。

这是我要描述的屏幕截图: 在此处输入图像描述

4

2 回答 2

0

当然,一旦我最终决定发布这个问题,我就意识到了我的问题。MouseDown 事件应如下所示:

private void genericView_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == System.Windows.Forms.MouseButtons.Right)
    {
        rowX = e.X;
        rowY = e.Y;
    }
}
于 2013-10-31T20:13:56.327 回答
-1

我期望 0 因为在这个特定的测试中我的网格中只有 1 行

0在这种情况下期望是不正确的。此外,-2147483648它是 Row Handle 的有效值(此值表示无效的行句柄)。有关行句柄的更多信息,请参阅识别行和卡片帮助文章。

我相信在您的情况下,最好通过ColumnView.GetSelectedRows方法获取所选行的句柄。有关详细信息,请参阅选择概述文档。

相关示例:

  1. 如何:识别位于鼠标光标下方的网格元素
  2. 如何:获取和修改选定的行
于 2013-11-01T05:52:29.513 回答