Использование простой фильтрации сообщений, как описано здесь (https://www.daniweb.com/programming/software-development/threads/304777/how-to-temporarily-disabling-mouse-clicks-on-a-vb-net-form) с таким классом
// relevant usings...
using System.Security.Permissions;
...
using System.Windows.Forms;
namespace YourNameSpace
{
public class MouseFilter : IMessageFilter
{
protected static bool inEffect = false;
public static bool ActiveFiltering { set { inEffect = value; } }
const int LButtonDown = 0x201;
const int LButtonUp = 0x202;
const int LButtonDoubleClick = 0x203;
[SecurityPermissionAttribute(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
public bool PreFilterMessage( ref Message m )
{
if (!inEffect)
return false;
bool result = false;
switch (m.Msg) {
case LButtonDown:
case LButtonUp:
case LButtonDoubleClick:
result = true;
break;
}
return result;
}
}
}
Статическое свойство ActiveFiltering предоставляет способ включить / отключить фильтрацию щелчков мыши при необходимости.
Конечно, класс Program должен выполняться
Application.AddMessageFilter (new MouseFilter ());
но, будучи inEffect = false, это не мешает нормальной работе мыши.
Мой элемент управления отключает мышь, когда это необходимо, и заботится о том, чтобы оставить его включенным в противном случае.
Решение не идеальное, но то, что возможно. Хуже всего то, что хотя элемент управления отменяет щелчки мыши, никто не может перейти к другому элементу управления или к самому окну.