2009-06-10 11 views
6

मैं विंडोज फॉर्म का उपयोग कर सी # में कीबोर्ड बफर कैसे फ्लश कर सकता हूं?सी # या .NET फ़्लशिंग कीबोर्ड बफर

मेरे पास एक बारकोड स्कैनर है जो कीबोर्ड की तरह कार्य करता है। यदि वास्तव में एक लंबा बारकोड स्कैन किया गया है और फॉर्म पर रद्द बटन दबाया गया है, तो मुझे कीबोर्ड बफर को साफ़ करने की आवश्यकता है। तो मुझे सभी लंबित इनपुट को फ्लश और अनदेखा करने की आवश्यकता है। मुझे बफर साफ़ करने की आवश्यकता है क्योंकि यदि बारकोड में रिक्त स्थान हैं, तो रिक्त स्थान को बटन क्लिक के रूप में संसाधित किया जाता है जो अनावश्यक है। true लिए फार्म पर

+0

कीबोर्ड बफर द्वारा आपका क्या मतलब है?क्या आप अभी तक संसाधित नहीं किए गए सभी लंबित इनपुट को फ़्लश करना और अनदेखा करना चाहते हैं? – Michael

+0

आप ऐसा करने की कोशिश क्यों कर रहे हैं? – SLaks

+0

हां ... उदाहरण के लिए मेरे पास एक बारकोड स्कैनर है जो कीबोर्ड की तरह कार्य करता है ... यदि वास्तव में एक लंबा बारकोड स्कैन किया गया है और फॉर्म पर रद्द बटन दबाया गया है, तो मुझे कीबोर्ड बफर को साफ़ करने की आवश्यकता है। तो मुझे सभी लंबित इनपुट को फ्लश और अनदेखा करने की आवश्यकता है। –

उत्तर

1

मैं आप ऐसा कर सकते यकीन नहीं है। मुख्य कार्यक्रम लूप के लिए कीस्ट्रोक इवेंट कतार में जाते हैं। इन कीस्ट्रोक को रद्द करने के लिए आपके द्वारा की जाने वाली कोई भी क्रिया कुंजीस्ट्रोक के बाद कतार में रखी जाएगी।

ईवेंट लूप केवल कीस्ट्रोक संसाधित होने के बाद ही आपकी रद्द कार्रवाई को प्राप्त करेगा। आप केवल कुछ घटनाओं के आधार पर कीस्ट्रोक को रद्द कर सकते हैं जो कीस्ट्रोक अनुक्रम के बीच में होता है।

2

सेट KeyPreview, तो KeyPress घटना को पकड़ने और true को e.Handled सेट करते हैं तो रद्द करने पर प्राप्त हुई।

संपादित: पकड़ो फार्म के कुंजी दबाने घटना

0

आप सकता है BIOS स्तर फ्लशिंग (http://support.microsoft.com/?scid=kb%3Ben-us%3B43993&x=22&y=10) है, लेकिन मैं इस निम्न स्तर दृष्टिकोण के खिलाफ सलाह देंगे विंडोज भी एक उच्च स्तर पर कुंजीपटल बफरिंग करता है के बाद से।

एक विशिष्ट ध्वज सेट होने पर किसी भी आने वाले चार खाने का सबसे अच्छा तरीका लगता है। जैसा कि स्लैक्स सुझाव देता है कि मैं KeyPreview को सत्य पर सेट करता हूं और e.Handled को KeyPress या KeyDown में सत्य में सेट करने के लिए सेट करता हूं .. कोई फर्क नहीं पड़ता।

2

जबकि (Console.KeyAvailable) {Console.ReadKey (true); }

1

@Chris:

Console.KeyAvailable मुझ पर एक अपवाद फेंक दिया क्योंकि कंसोल फोकस नहीं था।

अपवाद संदेश उपयोगी था, हालांकि। इस उदाहरण में पढ़ने के लिए Console.In.Peek() का उपयोग करने का सुझाव दिया गया।

मैंने सोचा कि यह एक वैकल्पिक समाधान और वंशावली के रूप में यहां ध्यान देने योग्य होगा।

if (-1 < Console.In.Peek()) { 
    Console.In.ReadToEnd(); 
} 
1

फॉर्म को अक्षम करें, और यह अक्षम होने पर सभी प्रोसेसिंग को DoEvents के साथ होने के लिए मजबूर करें। नियंत्रण किसी भी कीस्ट्रोक को अस्वीकार कर देना चाहिए क्योंकि वे अक्षम हैं। फिर फॉर्म को फिर से सक्षम करें।

this.Enabled = false; 
Application.DoEvents(); 
this.Enabled = true; 
0

यह एक पुराने सवाल है, लेकिन मैं एक ही मुद्दा मिल गया और मैं यह करने के लिए एक अच्छा तरीका है ...
जब Application.DoEvent() कहा जाता है, keystoke बफर कुंजी दबाने घटना फोन पाया, लेकिन _keypress को गलत पर सेट किया गया है, इसलिए यह उन सभी को छोड़ देगा, उसके बाद _keypress एक और कीप्रेस घटना के लिए तैयार होने के लिए सत्य पर वापस आ जाएगा!

Public _keypress As Boolean 
Private Sub Form1_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Form1.KeyPress 
    If Not _keypress Then 
     _keypress = True 
     //instructions 
    End If 
    Application.DoEvents() 
    _keypress = False 
End Sub