2011-05-23 5 views
5

यह पूरी तरह से उपयोगिता अनुरोध के लिए है जो मेरे ग्राहकों ने मुझसे पूछा है।जब मेरा उपयोगकर्ता numpad एंटर कुंजी टैप करता है तो मैं एक डाउनकी कुंजी कैसे भेज सकता हूं?

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

यहाँ है कि मैं क्या उपयोग करने के लिए कोशिश की है है:

private void dataGridView1_KeyUp(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     SendKeys.Send("{DOWN}"); 
    } 
} 

दुर्भाग्य से, यह अपेक्षा के अनुरूप काम नहीं करता है। कभी-कभी ऐसा लगता है कि उस कुंजी को कई बार आग लगती है, जिससे फोकस 2 या 3 या 4 कोशिकाओं को नीचे स्क्रॉल करने के लिए और वास्तव में उपयोगकर्ताओं को फोकस कर देता है।

मैं यह काम कैसे कर सकता हूं और अपने ग्राहकों को खुश कर सकता हूं?

+0

क्या आपने टेक्स्ट फ़ील्ड की एक श्रृंखला माना है? – sikas

+1

अपने SendKeys.Send –

+0

के बाद एक e.handled = true जोड़ने का प्रयास करें क्या वे प्रोग्राम का उपयोग कर रहे हैं जिनके पास आपके पास पहुंच है? यदि ऐसा है, तो क्यों न केवल प्रवेश कुंजी स्वीकार करें और इसका उपयोग करें - अन्यथा मुझे लगता है कि आपको अपनी विंडो में एक इंटिप्रेट हैंडल की आवश्यकता है और विशेष रूप से उस विंडो पर भेजने के लिए। –

उत्तर

0

आप एक बूलियन का उपयोग कर सकते हैं जो कि KeyDown पर सत्य पर सेट है और keyUp पर गलत पर सेट है।

केवल अपना प्रेषण चलाएं। जब बूलियन सत्य होता है तो भेजें। यह सुनिश्चित करना चाहिए कि प्रत्येक कुंजी प्रेस के लिए ईवेंट केवल एक बार निकाल दिया जाता है।

अक्सर यह है कि मैंने इसे अन्य भाषाओं में कैसे देखा है, मुझे यकीन नहीं है कि सी # में ऐसा करने का बेहतर तरीका है या नहीं।

-1

क्या आप उपयोगकर्ता द्वारा दर्ज किए जाने पर अगले टेक्स्टबॉक्स पर फ़ोकस सेट नहीं कर सकते? आप अगले टेक्स्टबॉक्स को स्थानांतरित करने के लिए TextBox.Focus() विधि का उपयोग कर सकते हैं।

+0

यह एक डाटाग्रिडव्यू के लिए है, टेक्स्टबॉक्स से कुछ लेना देना नहीं है। –

1
private void datagridView1_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     bindingsource.MoveNext(); 
    } 
} 
1

इसे आज़माएं - मैंने इसका परीक्षण किया है और यह काम करता है।

private void datagridView12_KeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.KeyCode == Keys.Enter) 
    { 
     int col = dataGridView12.CurrentCell.ColumnIndex; 
     int row = dataGridView12.CurrentCell.RowIndex; 
     if (row != dataGridView12.NewRowIndex) 
     { 
      if (col == (dataGridView12.Columns.Count - 1)) 
      { 
       col = -1; 
       row++; 
      } 

      dataGridView12.CurrentCell = dataGridView12[col, row + 1]; 
     } 

     e.Handled = true; 
     base.OnKeyDown(e); 
    } 
} 
0

जब आप प्रेस DataGridView में कुंजी दर्ज करें (संपादन मोड में है या नहीं) यह (.NET Framework 3.5 और 4.0 में) डिफ़ॉल्ट रूप से एक सेल नीचे चला जाता है।

क्या यह पहली कार्यक्षमता की आवश्यकता नहीं है?

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