在DatagridviewCell内的图像上检测鼠标悬停

时间:2017-07-13 21:01:57

标签: c# winforms datagridview

我创建了一个自定义DataGridView列,它通过从DataGridViewTextBoxCell类派生来托管图像和文本。

我希望能够检测到鼠标光标何时只在单元格的图像部分上。

https://i.stack.imgur.com/hfMHw.jpg

我尝试为每个单元格创建一个Rectangle对象,该对象在Paint()方法中设置为图像的边界,并确定光标位置是否包含在OnMouseMove()处理程序中的边界矩形中,但是这并没有#39工作。

  protected override void Paint(Graphics graphics, Rectangle clipBounds,
        Rectangle cellBounds, int rowIndex, DataGridViewElementStates cellState,
        object value, object formattedValue, string errorText,
        DataGridViewCellStyle cellStyle,
        DataGridViewAdvancedBorderStyle advancedBorderStyle,
        DataGridViewPaintParts paintParts)
    {
        // Paint the base content
        base.Paint(graphics, clipBounds, cellBounds, rowIndex, cellState,
           value, formattedValue, errorText, cellStyle,
           advancedBorderStyle, paintParts);

        if (this.Image != null)
        {
            imgBoundsRect = new Rectangle(cellBounds.Location, this.Image.Size);
            // Draw the image clipped to the cell.
            System.Drawing.Drawing2D.GraphicsContainer container = graphics.BeginContainer();

            graphics.SetClip(cellBounds);
            graphics.DrawImageUnscaled(this.Image, cellBounds);

            graphics.EndContainer(container);
        }
    }

    protected override void OnMouseMove(DataGridViewCellMouseEventArgs e)
    {
        base.OnMouseMove(e);
        Console.WriteLine(e.Location);
        if (imgBoundsRect.Contains(e.Location))
        {
            this.ToolTipText = "View Doc";
        }
    }

1 个答案:

答案 0 :(得分:0)

这不能解答您的问题,但因为它适用于DataGridViewImageCell我决定将其作为参考。

您的代码看起来非常相似。请务必将Location的{​​{1}}保持在imgBoundsRect,就像(0,0)中的鼠标坐标一样!

CellMouseMove