You could derive a new class from a control and override the WndProc,
passing the message to the base class only if not disabled. However you will
have to take care of the drawing of the control if it get dirty, otherwise
the controls "disappears" from the screen.
using System;
namespace System.Windows.Forms
{
public class MyButton : Button
{
protected override void WndProc( ref Message m )
{
if( this.Enabled ) base.WndProc( ref m );
}
}
}