2017-03-28 192 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'來做什麼 –