Наследовать от класса System.Windows.Forms.Button и переопределять следующие методы:
- OnMouseDown, это обрабатывает ваше "сжатое изображение"
- OnMouseEnter, это обрабатывает ваше "изображение при наведении курсора"
- OnMouseLeave, и это обрабатывает ваше исходное изображение
Код будет выглядеть примерно так:
public class MyButton : System.Windows.Forms.Button {
public MyButton()
: base() {
// No default implementation
}
protected override void OnMouseDown(Object sender, MouseEventArgs e) {
this.Image = Properties.Resources.PressedImage;
}
protected override void OnMouseEnter(Object sender, MouseEventArgs e) {
this.Image = Properties.Resources.HoveringImage;
}
protected override void OnMouseLeave(Object sender, MouseEventArgs e) {
this.Image = Properties.Resources.DefaultImage;
}
}
Теперь, поскольку у вас есть несколько кнопок, вы, конечно, можете превратить приобретение ресурсов в свойства.
public Image DefaultImage {
get;
set;
}
public Image PressedImage {
get;
set;
}
public Image HoveringImage {
get;
set;
}
И используйте их в переопределенных, виртуальных методах. Это, вероятно, ваш лучший подход. Я хотел бы избежать ответа ниже (без обид, Phoexo), так как это очень необычное и грязное решение.
После того, как вы напишите и скомпилируете новую кнопку, вы сможете выполнить простой поиск и замену, чтобы изменить существующие типы кнопок. Вам нужно будет немного очистить и установить три свойства для каждой кнопки для соответствующих им изображений, а также очистить некоторый дизайнерский код, но это облегчит вашу жизнь в долгосрочной перспективе, если вы добавите больше кнопок.