2012-11-05 28 views
8

मैं विंडोज 8 टाइल एप्लिकेशन में न्यूमेरिकबॉक्स के लिए एक अच्छा विकल्प खोजने की कोशिश कर रहा हूं। मैंने विंडोज़ फॉर्म के लिए मौजूद एक ही न्यूमेरिकबॉक्स का उपयोग करने की कोशिश की लेकिन मुझे यह कहते हुए एक त्रुटि मिली कि ये विंडोज 8 अनुप्रयोगों द्वारा समर्थित नहीं हैं (?)। मैंने देखा कि टाइल अनुप्रयोगों के लिए टेक्स्टबॉक्स तत्व में एक इनपुटस्कोप है जिसे "संख्या" पर सेट किया जा सकता है, लेकिन यह अभी भी उपयोगकर्ता को जो भी चरित्र चाहता है उसे टाइप करने की अनुमति देता है। मुझे लगता है कि इनपुटस्कोप ऐसा नहीं करता जो मुझे लगता है कि यह करता है।विकल्प?

मैं वर्तमान में टेक्स्टबॉक्स के साथ प्रबंधन कर रहा हूं, लेकिन क्योंकि मैं गणना कर रहा हूं क्योंकि पाठ को लगातार दशमलव में परिवर्तित किया जाना चाहिए और फिर जब मैं इंटरफ़ेस को अपडेट करना चाहता हूं तो टेक्स्ट पर वापस लेना होगा, इसके अलावा कई चेक निष्पादित करने के अलावा सुनिश्चित करें कि उपयोगकर्ता गैर-संख्यात्मक वर्ण दर्ज नहीं करता है। यह बेहद थकाऊ हो रहा है और विंडोज फॉर्म से बहुत परिचित है यह गलत दिशा में एक कदम प्रतीत होता है। मुझे कुछ स्पष्ट याद आना चाहिए?

+0

'इनपुटस्कोप' का उपयोग टच इनपुट कीबोर्ड प्रकार के लिए किया जाता है। – BrunoLM

उत्तर

3

मैं NumericTextBox से परिचित नहीं हूं, लेकिन यहां एक साधारण सी #/एक्सएएमएल कार्यान्वयन है जो केवल अंक और दशमलव वर्ण की अनुमति देता है।

यह सब OnKeyDown ईवेंट ओवरराइड करता है; दबाए जा रहे कुंजी के आधार पर, यह घटना को TextBox कक्षा तक पहुंचने की इजाजत देता है या अनुमति देता है।

मुझे ध्यान रखना चाहिए कि यह कार्यान्वयन विंडोज स्टोर ऐप्स के लिए है - मेरा मानना ​​है कि आपका प्रश्न उस प्रकार के ऐप के बारे में है, लेकिन मैं 100% निश्चित नहीं हूं।

public class MyNumericTextBox : TextBox 
{ 
    protected override void OnKeyDown(KeyRoutedEventArgs e) 
    { 
     HandleKey(e); 

     if (!e.Handled) 
      base.OnKeyDown(e); 
    } 

    bool _hasDecimal = false; 
    private void HandleKey(KeyRoutedEventArgs e) 
    { 
     switch (e.Key) 
     { 
      // allow digits 
      // TODO: keypad numeric digits here 
      case Windows.System.VirtualKey.Number0: 
      case Windows.System.VirtualKey.Number1: 
      case Windows.System.VirtualKey.Number2: 
      case Windows.System.VirtualKey.Number3: 
      case Windows.System.VirtualKey.Number4: 
      case Windows.System.VirtualKey.Number5: 
      case Windows.System.VirtualKey.Number6: 
      case Windows.System.VirtualKey.Number7: 
      case Windows.System.VirtualKey.Number8: 
      case Windows.System.VirtualKey.Number9: 
       e.Handled = false; 
       break; 

      // only allow one decimal 
      // TODO: handle deletion of decimal... 
      case (Windows.System.VirtualKey)190: // decimal (next to comma) 
      case Windows.System.VirtualKey.Decimal: // decimal on key pad 
       e.Handled = (_hasDecimal == true); 
       _hasDecimal = true; 
       break; 

      // pass various control keys to base 
      case Windows.System.VirtualKey.Up: 
      case Windows.System.VirtualKey.Down: 
      case Windows.System.VirtualKey.Left: 
      case Windows.System.VirtualKey.Right: 
      case Windows.System.VirtualKey.Delete: 
      case Windows.System.VirtualKey.Back: 
      case Windows.System.VirtualKey.Tab: 
       e.Handled = false; 
       break; 

      default: 
       // default is to not pass key to base 
       e.Handled = true; 
       break; 
     } 
    } 
} 

यहां कुछ नमूना एक्सएएमएल है। ध्यान दें कि यह प्रोजेक्ट नेमस्पेस में MyNumericTextBox मानता है।

<StackPanel Background="Black"> 
    <!-- custom numeric textbox --> 
    <local:MyNumericTextBox /> 
    <!-- normal textbox --> 
    <TextBox /> 
</StackPanel> 
+0

बस एक नोट, यह उदाहरण Shift + संख्या को पूरा नहीं करता है, और इसलिए यह विशेष वर्णों को छेड़छाड़ करने की अनुमति देता है, दशमलव बिंदु को केवल एक बार जोड़ा जा सकता है, अगर मिटा दिया जाता है तो इसे फिर से जोड़ा नहीं जा सकता है। – Dave

0

WinRT XAML Toolkit की NumericUpDown नियंत्रण के लिए आप क्या देख रहे हैं हो सकता है।

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

  • कोई संबंधित समस्या नहीं^_^