I hope I understand your question correctly. I think we are talking about two things.
Firstly, how events work in C # Secondly, how a WinForms application written in C # knows when you clicked a button.
# - . , , , , ..... . Add(), , Remove(). , , , .
:
# ?
- #. , Win32, . Winforms, , ? ( " " https://msdn.microsoft.com/en-us/library/dn457346.aspx) , , .

, Windows.Forms.Controls.ControlNativeWindow WndProc, System.Windows.Forms.Message m.
, "debuggableCallback". , Win32API.
:
http://referencesource.microsoft.com/#System.Windows.Forms/winforms/Managed/System/WinForms/NativeWindow.cs,ad40308c5b6490dd
private IntPtr DebuggableCallback(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam) {
Message m = Message.Create(hWnd, msg, wparam, lparam);
try {
if (weakThisPtr.IsAlive && weakThisPtr.Target != null) {
WndProc(ref m);
}
else {
DefWndProc(ref m);
}
}
finally {
if (msg == NativeMethods.WM_NCDESTROY) ReleaseHandle(false);
if (msg == NativeMethods.WM_UIUNSUBCLASS) ReleaseHandle(true);
}
return m.Result;
}
, , Windows, API Win32, . , System.Windows.Forms , .