0

私は DevExpressGridControlを持っています。これにはContextMenuStrip2 つのアイテムがあります。GridControlのレコードを右クリックして、ユーザーの既定のブラウザーを起動し、既定の検索エンジンを使用して の項目の 1 つを使用して用語を検索できるようにしたいと考えています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. この特定のテストでは、グリッドに 1 行しかないため、0 を期待しています。

これを達成する別の方法はありますか?グリッドは複数選択をサポートしているため、右クリックするとすぐにプログラムで行を選択して選択を「上書き」したくありません。

これが私が説明しようとしているもののスクリーンショットです: ここに画像の説明を入力

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

この特定のテストでは、グリッドに 1 行しかないため、0 を期待します

0この場合、期待するのは正しくありません。さらに、-2147483648これは行ハンドルの有効な値です (この値は無効な行ハンドルを表します)。行ハンドルの詳細については、行とカードの識別のヘルプ記事を参照してください。

あなたの場合、ColumnView.GetSelectedRowsメソッドで選択した行のハンドルを取得する方が良いと思います。詳細については、セレクションの概要ドキュメントを参照してください。

関連する例:

  1. 方法: マウス カーソルの下にあるグリッドの要素を識別する
  2. 方法: 選択した行を取得して変更する
于 2013-11-01T05:52:29.513 に答える