2009-07-20 19 views
31

मैं WPF में अनुप्रयोग विकसित कर रहा हूं लेकिन कुछ घटक WinForms का उपयोग करके लिखे गए हैं। मैं इन घटकों को WPF भाग से मुख्य इशारा खींचने और उन्हें कुंजी enum (WinForms में उपयोग) में परिवर्तित करने के लिए नहीं कर सकता था।मैं 'System.Windows.Input.Key' को 'System.Windows.Forms.Keys' में कैसे परिवर्तित कर सकता हूं?

क्या इसके लिए कनवर्टर में कोई अंतर्निहित है? (शायद नहीं) क्या आपको ऐसा करने के लिए "बड़े स्विच केस से आसान" विधि पता है?

उत्तर

52
Keys formsKey = ...; 
Key wpfKey = ...; 
wpfKey = KeyInterop.KeyFromVirtualKey((int)formsKey); 
formsKey = (Keys)KeyInterop.VirtualKeyFromKey(wpfKey); 

KeyInterop class "कुंजी," प्लस तथ्य यह है कि विंडोज फॉर्म्स Keys गणन विन 32 आभासी कुंजी कोड के समान पूर्णांक मूल्यों गया है।

+2

धन्यवाद। यह वास्तव में अच्छा है। लेकिन मैं संशोधक कैसे परिवर्तित कर सकता हूँ? –

0

आप, संशोधक परिवर्तित SystemKey उपयोग करना चाहते हैं तो आप एक KeyEventArgs देख रहे हैं:

System.Windows.Input.KeyEventArgs args; 
System.Windows.Input.Key wpfKey= args.Key == Key.System ? args.SystemKey : args.Key; 
formsKey = (System.Windows.Forms.Keys)KeyInterop.VirtualKeyFromKey(wpfKey); 
1

शायद ज़रुरत पड़े लोगों को अभी भी 7 साल बाद संशोधक समस्या का सामना, यहाँ मेरी समाधान है कि अब तक काम किया है :

public static class KeyEventExts 
{ 
    public static System.Windows.Forms.KeyEventArgs ToWinforms(this System.Windows.Input.KeyEventArgs keyEventArgs) 
    { 
     // So far this ternary remained pointless, might be useful in some very specific cases though 
     var wpfKey = keyEventArgs.Key == System.Windows.Input.Key.System ? keyEventArgs.SystemKey : keyEventArgs.Key; 
     var winformModifiers = keyEventArgs.KeyboardDevice.Modifiers.ToWinforms(); 
     var winformKeys = (System.Windows.Forms.Keys)System.Windows.Input.KeyInterop.VirtualKeyFromKey(wpfKey); 
     return new System.Windows.Forms.KeyEventArgs(winformKeys | winformModifiers); 
    } 

    public static System.Windows.Forms.Keys ToWinforms(this System.Windows.Input.ModifierKeys modifier) 
    { 
     var retVal = System.Windows.Forms.Keys.None; 
     if(modifier.HasFlag(System.Windows.Input.ModifierKeys.Alt)) 
     { 
      retVal |= System.Windows.Forms.Keys.Alt; 
     } 
     if (modifier.HasFlag(System.Windows.Input.ModifierKeys.Control)) 
     { 
      retVal |= System.Windows.Forms.Keys.Control; 
     } 
     if (modifier.HasFlag(System.Windows.Input.ModifierKeys.None)) 
     { 
      // Pointless I know 
      retVal |= System.Windows.Forms.Keys.None; 
     } 
     if (modifier.HasFlag(System.Windows.Input.ModifierKeys.Shift)) 
     { 
      retVal |= System.Windows.Forms.Keys.Shift; 
     } 
     if (modifier.HasFlag(System.Windows.Input.ModifierKeys.Windows)) 
     { 
      // Not supported lel 
     } 
     return retVal; 
    } 
} 
संबंधित मुद्दे

 संबंधित मुद्दे