【发布时间】:2017-03-28 14:50:00
【问题描述】:
我用自己的枚举 MessageBoxButton 创建了自己的 MessageBox :
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)
{
...
}
有没有办法用MessageBoxButton 调用Show 并将值隐式转换为MyMessageBoxButton?
【问题讨论】:
-
我可以建议对您的解决方案进行更改吗?您有一个列出可能的按钮组合的枚举。但是,您已经为多个变体创建了一个值。这是不灵活的。我建议如下:None = 0,OK = 1,Yes = 2,No = 4,Cancel = 8,Later = 16 这样您就可以使用按位运算来锻炼哪些按钮可用。 1 + 8 = 9(确定,取消)2 + 4 = 6(是,否)等
-
你试过
switch/case吗?你所谓的casting实际上是mapping,但是你必须为那个额外的价值做点什么,不是吗? -
我尝试了 itsme86 提供的解决方案,它可以工作。就像我不明白我应该使用
try/catch -
这是 wpf 吗?因为在 winforms 中它将是
MessageBoxButtons而不是MessageBoxButton -
@RossMiller - 这是与
System.Windows.Forms.MessageBoxButtons相同的枚举,只是他将最后一项从RetryCancel重命名为NowLaterCancel并删除了AbortRetryCancel。该设计有效,因为它允许用户在一个参数中将所需的按钮配置传递给消息框。