如何为用户定义的按钮创建具有已知值和固定值的属性?

时间:2011-10-02 11:19:18

标签: c# winforms methods properties

我有一个用户定义的按钮,它可能有一个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窗口中为此自定义按钮设置一个属性,此属性具有一些默认值,如pauseplay并选择它会导致更改按钮的样式(使用运行的SetStyle方法)

2 个答案:

答案 0 :(得分:2)

我会创建一个枚举并将其公开为Style属性。然后,有一个内部字典,用于关闭枚举值,以选择适当的ButtonStyle对象传递给您的SetStyle方法。

答案 1 :(得分:1)

我认为您需要做的就是继承Button类并添加您的枚举:

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;
          }
      }
    }
  }
}