2020-07-13 00:21:29 +12:00
|
|
|
|
// <copyright file="DgvMouseRow.cs" company="PlaceholderCompany">
|
|
|
|
|
// Copyright (c) PlaceholderCompany. All rights reserved.
|
|
|
|
|
// </copyright>
|
|
|
|
|
|
|
|
|
|
namespace SystemTrayMenu.Helper
|
|
|
|
|
{
|
|
|
|
|
using System;
|
|
|
|
|
using System.Windows.Forms;
|
|
|
|
|
|
|
|
|
|
public class DgvMouseRow : IDisposable
|
|
|
|
|
{
|
2021-11-17 12:13:46 +13:00
|
|
|
|
private readonly Timer timerRaiseRowMouseLeave = new();
|
2021-04-17 12:39:48 +12:00
|
|
|
|
private DataGridView dgv;
|
|
|
|
|
private DataGridViewCellEventArgs eventArgs;
|
2020-07-13 00:21:29 +12:00
|
|
|
|
|
|
|
|
|
internal DgvMouseRow()
|
|
|
|
|
{
|
|
|
|
|
timerRaiseRowMouseLeave.Interval = 200;
|
2022-10-21 04:55:54 +13:00
|
|
|
|
timerRaiseRowMouseLeave.Tick += TimerRaiseRowMouseLeave_Tick;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
~DgvMouseRow() // the finalizer
|
|
|
|
|
{
|
|
|
|
|
Dispose(false);
|
2020-07-13 00:21:29 +12:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal event Action<object, DataGridViewCellEventArgs> RowMouseEnter;
|
|
|
|
|
|
|
|
|
|
internal event Action<object, DataGridViewCellEventArgs> RowMouseLeave;
|
|
|
|
|
|
|
|
|
|
public void Dispose()
|
|
|
|
|
{
|
|
|
|
|
Dispose(true);
|
|
|
|
|
GC.SuppressFinalize(this);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal void CellMouseEnter(object sender, DataGridViewCellEventArgs newEventArgs)
|
|
|
|
|
{
|
|
|
|
|
DataGridView newDgv = (DataGridView)sender;
|
|
|
|
|
|
|
|
|
|
if (dgv != newDgv || newEventArgs.RowIndex != eventArgs.RowIndex)
|
|
|
|
|
{
|
|
|
|
|
if (timerRaiseRowMouseLeave.Enabled)
|
|
|
|
|
{
|
|
|
|
|
timerRaiseRowMouseLeave.Stop();
|
|
|
|
|
TriggerRowMouseLeave();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
TriggerRowMouseEnter(newDgv, newEventArgs);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
timerRaiseRowMouseLeave.Stop();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dgv = newDgv;
|
|
|
|
|
eventArgs = newEventArgs;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal void CellMouseLeave(object sender, DataGridViewCellEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
timerRaiseRowMouseLeave.Start();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
internal void MouseLeave(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
if (timerRaiseRowMouseLeave.Enabled)
|
|
|
|
|
{
|
|
|
|
|
timerRaiseRowMouseLeave.Stop();
|
|
|
|
|
TriggerRowMouseLeave();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected virtual void Dispose(bool disposing)
|
|
|
|
|
{
|
|
|
|
|
if (disposing)
|
|
|
|
|
{
|
2022-10-21 04:55:54 +13:00
|
|
|
|
timerRaiseRowMouseLeave.Tick -= TimerRaiseRowMouseLeave_Tick;
|
2020-07-13 00:21:29 +12:00
|
|
|
|
timerRaiseRowMouseLeave.Dispose();
|
2022-10-21 04:55:54 +13:00
|
|
|
|
dgv = null;
|
2020-07-13 00:21:29 +12:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-10-21 04:55:54 +13:00
|
|
|
|
private void TimerRaiseRowMouseLeave_Tick(object sender, EventArgs e)
|
|
|
|
|
{
|
|
|
|
|
timerRaiseRowMouseLeave.Stop();
|
|
|
|
|
TriggerRowMouseLeave();
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-13 00:21:29 +12:00
|
|
|
|
private void TriggerRowMouseLeave()
|
|
|
|
|
{
|
2020-07-16 07:46:09 +12:00
|
|
|
|
if (dgv != null)
|
|
|
|
|
{
|
|
|
|
|
RowMouseLeave?.Invoke(dgv, eventArgs);
|
|
|
|
|
}
|
|
|
|
|
|
2020-07-13 00:21:29 +12:00
|
|
|
|
dgv = null;
|
|
|
|
|
eventArgs = null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void TriggerRowMouseEnter(DataGridView dgv, DataGridViewCellEventArgs e)
|
|
|
|
|
{
|
|
|
|
|
RowMouseEnter?.Invoke(dgv, e);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|