我创建了一个自定义DataGridView列,它通过从DataGridViewTextBoxCell类派生来托管图像和文本。
我希望能够检测到鼠标光标何时只在单元格的图像部分上。
我尝试为每个单元格创建一个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";
}
}
答案 0 :(得分:0)
这不能解答您的问题,但因为它适用于DataGridViewImageCell
我决定将其作为参考。
您的代码看起来非常相似。请务必将Location
的{{1}}保持在imgBoundsRect
,就像(0,0)
中的鼠标坐标一样!
CellMouseMove