Как сделать свойство с известными и фиксированными значениями для определенной пользователем кнопки? - PullRequest
2 голосов
/ 02 октября 2011

У меня есть пользовательская кнопка, и она может иметь свойство Style, которое я выбираю в окне properties для его значения, и в зависимости от этого значения его изображение и стиль будут меняться.

Как сделать так, чтобы это свойство имело некоторые предопределенные и фиксированные значения в раскрывающемся списке в окне properties? и выбор значения вызывает запуск метода


-details:

эта кнопка может получить указанный внешний вид, например пауза и воспроизведение стилей. поэтому я сделал класс для стилей:

// style of the button; pause, play, reset, etc
public abstract class ButtonStyle
{
    public abstract Image GetImage();
}
// inherited classes of class ButtonStyle
public class PauseButtonStyle : ButtonStyle
{
    public override Image GetImage()
    {
        return CustomButtonLibrary.Properties.Resources.PauseButton;
    }
}
public class PlayButtonStyle : ButtonStyle
{
    public override Image GetImage()
    {
        return CustomButtonLibrary.Properties.Resources.PlayButton;
    }
}

И есть кнопка в кнопке для установки указанного стиля (пауза, воспроизведение, ...):

public void SetStyle(ButtonStyle style)
{
    button1.Image = style.GetImage();                       
}

Теперь, как я могу иметь свойство для этой пользовательской кнопки в окне properties, чтобы это свойство имело некоторые значения по умолчанию, такие как pause, play и т. Д. , и выбор его вызывает изменение стиля кнопки (с запуском Метод SetStyle)

Ответы [ 2 ]

2 голосов
/ 02 октября 2011

Я бы сделал перечисление и выставил бы его как свойство Style.Затем имейте внутренний словарь, который отключает значение перечисления, чтобы выбрать соответствующий ButtonStyle объект для передачи в ваш SetStyle метод.

1 голос
/ 02 октября 2011

Я думаю, все, что вам нужно сделать, это унаследовать класс Button и добавить свой Enum:

public class ButtonEx : Button
{
  public enum ButtonStateStyles
  {
    None,
    Pause,
    Play,
  }

  private ButtonStateStyles _ButtonStateStyle = ButtonStateStyles.None;

  public ButtonStateStyles ButtonStateStyle
  {
    get { return _ButtonStateStyle; }
    set
    {
      _ButtonStateStyle = value;

      switch (_ButtonStateStyle)
      {
        case ButtonStateStyles.Pause:
          {
            base.Image = new PauseButtonStyle().GetImage();
            break;
          }
        case ButtonStateStyles.Play:
          {
            base.Image = new PlayButtonStyle().GetImage();
            break;
          }
        default:
          {
            base.Image = null;
            break;
          }
      }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...