Одна вещь, которую вы можете сделать, это превратить ButtonType
в базовый класс (или интерфейс, если хотите):
public abstract class ButtonType
{
public abstract Image GetImage();
}
Тогда каждый из ваших типов становится подклассом:
public class PauseButtonType : ButtonType
{
public Image GetImage()
{
return CustomButtonLibrary.Properties.Resources.PauseButton;
}
}
public class PlayButtonType : ButtonType
{
public Image GetImage()
{
return CustomButtonLibrary.Properties.Resources.PlayButton;
}
}
Ваш метод изменения изображения становится:
private ButtonType buttonType; // public variables usually aren't a good idea
public void ChangeButtonType(ButtonType type)
{
button1.Image = type.GetImage();
buttonType = type;
}
Таким образом, когда вы хотите добавить другой тип, вы добавляете другой подкласс ButtonType и передаете его в свой метод ChangeButtonType
.
Так как этот метод находится в вашем пользовательском классе кнопок, я бы, вероятно, пошел немного дальше и инкапсулировал бы стиль / внешний вид в классе:
public class ButtonStyle
{
// might have other, non-abstract properties like standard width, height, color
public abstract Image GetImage();
}
// similar subclasses to above
А затем на самой кнопке:
public void SetStyle(ButtonStyle style)
{
this.Image = style.GetImage();
// other properties, if needed
}
Вы можете настроить поведение кнопок (т. Е. Действия, которые они выполняют при нажатии) аналогичным образом с базовым классом ButtonAction и назначить конкретные действия, такие как Stop и Play, когда вы хотите изменить назначение и стиль кнопки..