Класс Control, от которого наследуется Button, имеет метод OnClick, который вызывает событие Click. Используя рефлексию, вы можете вызвать этот метод, даже если он объявлен защищенным. Например, я создал следующий метод расширения:
public static void PerformClick(this Control value)
{
if (value == null)
throw new ArgumentNullException();
var methodInfo = value.GetType().GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance);
methodInfo.Invoke(value, new object[] { EventArgs.Empty });
}
Хотя это можно считать грязным хаком ...