0

当我实现 GridView 的 MouseDown 事件时,在我单击 GridView 内的任何内容后,我的程序会发疯并开始将屏幕上的所有内容都视为 GridView,在我单击的任何位置调用 MouseDown 事件。我不太确定为什么会这样,但我发现了这个代码片段:

    GridHitInfo downHitInfo = null;

    private void view_MouseDown(object sender, MouseEventArgs e)
    {
        GridView view = sender as GridView;
        downHitInfo = null;
        GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y));
        if (Control.ModifierKeys != Keys.None) return;
        if (e.Button == MouseButtons.Left && hitInfo.RowHandle >= 0)
            downHitInfo = hitInfo;

    }

这可以防止这种情况。但是,我仍然不确定为什么这会阻止这种精神错乱。任何关于正在发生的事情的想法表示赞赏

4

2 回答 2

0

可能是因为事件是在表单上注册的......而不是gridcontrol

于 2013-05-07T11:48:51.790 回答
0

您可能应该使用 来检查命中是否在一行的单元格中hitInfo.InRowCell,如下所示:

GridView view = sender as GridView;
GridHitInfo hitInfo = view.CalcHitInfo(new Point(e.X, e.Y));

// Verify that the click was in a cell of a row, if not, don't do anything
if (!hitInfo.InRowCell)
    return;

PS:您可以使用e.Location而不是创建一个新点new Point(e.X, e.Y)

GridHitInfo hitInfo = view.CalcHitInfo(e.Location);
于 2013-05-07T15:41:54.727 回答