2017-03-28 145 views
0

我已经创建了自己的MessageBox用我自己的枚举MessageBoxButton隐式转换:创建枚举值

public enum MyMessageBoxButton 
{ 
    OK = MessageBoxButton.OK, 
    OKCancel = MessageBoxButton.OKCancel, 
    YesNoCancel = MessageBoxButton.YesNoCancel, 
    YesNo = MessageBoxButton.YesNo, 
    NowLaterCancel = 5, 
} 

正如你所看到的,它就像System.Windows.MessageBoxButton 1点的值更。

对于我的课MyMessageBox,我具备的功能:

public static MessageBoxResult Show(String caption, String message, MyMessageBoxButton button, MessageBoxImage icon) 
{ 
    ... 
} 

有没有办法来调用ShowMessageBoxButton和隐式转换价值为MyMessageBoxButton

+0

我可以建议改变你的解决方案?你有一个列举可能的按钮组合的枚举。但是,您已为多个变体创建了单个值。这是不灵活的。我建议如下:None = 0,OK = 1,Yes = 2,No = 4,Cancel = 8,Later = 16这样你可以使用按位操作来锻炼哪些按钮可用。 1 + 8 = 9(OK,取消)2 + 4 = 6(是,否)等 –

+0

您是否尝试过'switch/case'?你称之为*铸造*实际上是*绘图*,但你必须为这个额外的价值做些事情,对吗? – Sinatr

+0

我试过由itsme86提供的解决方案,它的工作原理。就像我不打扰我应该使用'try/catch' –

回答

1

您可以创建一个转换到MessageBoxButtons一个MyMessageBoxButton一个转换方法,创建Show方法的重载采用一个MessageBoxButtons,然后在该方法中你会做的转换和调用现有Show方法。

既然你没有为所有项目匹配枚举值(如AbortRetryIgnore)这样做,你将不得不决定要显示的按钮组合,如果有人选择其中的一个:

public static MyMessageBoxButton ConvertToMyMessageBoxButton(MessageBoxButtons input) 
{ 
    MyMessageBoxButton result; 

    switch (input) 
    { 
     case MessageBoxButtons.OK: 
      result = MyMessageBoxButton.OK; 
      break; 
     case MessageBoxButtons.OKCancel: 
      result = MyMessageBoxButton.OKCancel; 
      break; 
     case MessageBoxButtons.RetryCancel: 
      result = MyMessageBoxButton.NowLaterCancel; 
      break; 
     case MessageBoxButtons.YesNo: 
      result = MyMessageBoxButton.YesNo; 
      break; 
     case MessageBoxButtons.YesNoCancel: 
      result = MyMessageBoxButton.YesNoCancel; 
      break; 
     default: 
      // AbortRetryIgnore will fall through to this 
      result = MyMessageBoxButton.OKCancel; 
      break; 
    } 

    return result; 
} 

然后你可以使用在Show方法的重载Convert方法,来进行转换,并调用你原来Show

public static MessageBoxResult Show(String caption, String message, 
    MessageBoxButtons button, MessageBoxImage icon) 
{ 
    return Show(caption, message, ConvertToMyMessageBoxButton(button), icon); 
} 
+0

其实它可以与演员阵营合作,但我会改变你的解决方案,更易于维护。 –

0

您可以创建Show()过载,需要一个MessageBoxButton且将其:

public static MessageBoxResult Show(String caption, String message, MessageBoxButton button, MessageBoxImage icon) 
{ 
    return Show(caption, message, (MyMessageBoxButton)(int)button, icon); 
} 

不知道,如果第一投给int是必要的。先尝试一下。

请注意,这依赖于两个枚举的值匹配。例如,MessageBoxButton.YesNoCancel必须为3,就像MyMessageBoxButton一样。

+0

需要强制转换。由于C#不允许隐式转换 –

+2

这很容易出错。我真的会提供一个方法,该方法为使用'switch ... case'的给定'MessageBoxButton'返回一个“MyMessageBoxButton”。 –

+0

我试着用一个新的显示方法:'返回显示(标题,消息,(MessageBoxSVButton)按钮,图标);'它似乎工作。我不明白我应该用'switch/case'来做什么 –