मैं Winforms DataGridViewTextBoxCell
में एंटर कुंजी व्यवहार कैसे कर सकता हूं जैसे कि यह एक सामान्य Winforms TextBox
(वर्तमान सेल को बदलने के बजाय टेक्स्ट में एक नई पंक्ति जोड़ें) में करता है?डेटाग्रिड व्यू: मैं वर्तमान कुंजी को बदलने के बजाय एंटर कुंजी को एक नई लाइन कैसे जोड़ सकता हूं?
उत्तर
ठीक है, मुझे पता चला कि समस्या को कैसे हल किया जाए। सबसे पहले, एक वर्ग CustomDataGridViewTextBoxEditingControl
कहा जाता है जो DataGridViewTextBoxEditingControl
से निकला है बनाते हैं, और EditingControlWantsInputKey
इस तरह ओवरराइड:
public override bool EditingControlWantsInputKey(
Keys keyData,
bool dataGridViewWantsInputKey)
{
switch (keyData & Keys.KeyCode)
{
case Keys.Enter:
// Don't let the DataGridView handle the Enter key.
return true;
default:
break;
}
return base.EditingControlWantsInputKey(keyData, dataGridViewWantsInputKey);
}
यह कुंजी दर्ज सौंपने और वर्तमान कक्ष में बदलाव करने से DataGridView
बंद हो जाता है। हालांकि, एंटर कुंजी को एक नई लाइन नहीं जोड़ती है। (ऐसा लगता है कि DataGridViewTextBoxEditingControl
ने एंटर कुंजी की कार्यक्षमता को हटा दिया है)। इसलिए, हम अपने आप को OnKeyDown
ओवरराइड और कार्यक्षमता को लागू है, इस तरह की जरूरत है:
protected override void OnKeyDown(KeyEventArgs e)
{
switch (e.KeyCode & Keys.KeyCode)
{
case Keys.Enter:
int oldSelectionStart = this.SelectionStart;
string currentText = this.Text;
this.Text = String.Format("{0}{1}{2}",
currentText.Substring(0, this.SelectionStart),
Environment.NewLine,
currentText.Substring(this.SelectionStart + this.SelectionLength));
this.SelectionStart = oldSelectionStart + Environment.NewLine.Length;
break;
default:
break;
}
base.OnKeyDown(e);
}
फिर, एक वर्ग CustomDataGridViewTextBoxCell
कहा जाता है जो DataGridViewTextBoxCell
से निकला है बनाते हैं, और CustomDataGridViewTextBoxEditingControl
के प्रकार के वापस जाने के लिए EditType
संपत्ति को ओवरराइड।
public override Type EditType
{
get
{
return typeof(CustomDataGridViewTextBoxEditingControl);
}
}
आप यह कर लेंगे, तो आप CellTemplate
संपत्ति मौजूदा स्तंभ पर एक CustomDataGridViewTextBoxCell
करने के लिए सेट कर सकते हैं, या आप एक वर्ग एक CustomDataGridViewTextBoxCell
को CellTemplate
पूर्व निर्धारित साथ DataGridViewColumn
से ली गई बना सकते हैं, और आप पूरी तरह से तैयार हो जाएगा!
आप DataGridViewCellStyle.WrapMode संपत्ति को सत्य पर सेट करके ऐसा कर सकते हैं। MSDN से:
तो WrapMode एक सेल कि पाठ होता है के लिए गलत है, सेल एक पंक्ति पर पाठ प्रदर्शित करता है, और बॉक्स पात्रों के रूप में किसी भी एम्बेडेड न्यू लाइन वर्ण प्रदर्शित करता है। यदि सेल के लिए WrapMode सत्य है जिसमें टेक्स्ट है, तो सेल लाइन ब्रेक के रूप में न्यूलाइन वर्ण प्रदर्शित करता है, लेकिन सेल की चौड़ाई से अधिक किसी भी पंक्ति को लपेटता है।
आप कॉलम के लिए डिफ़ॉल्ट सेल स्टाइल का उपयोग कर सेल पर स्टाइल प्रॉपर्टी तक पहुंचने या कॉलम में सभी सेल के लिए इसे विशिष्ट कक्षों के लिए सेट कर सकते हैं।
[अपडेट] , अपने DataGridView में चुनिंदा कुंजी दर्ज एक संदेश फ़िल्टर फार्म DataGridView युक्त करने के लिए जोड़ अक्षम करने के लिए नीचे के रूप में दिखाया गया है:
public class KeyMessageFilter : IMessageFilter
{
private Form m_target = null;
public KeyMessageFilter(Form targetForm)
{
m_target = targetForm;
}
private const int WM_KEYDOWN = 0x0100;
private const int WM_KEYUP = 0x0101;
public bool PreFilterMessage(ref Message m)
{
if (m.Msg == WM_KEYDOWN)
{
//Note this ensures Enter is only filtered if in the
// DataGridViewTextBoxEditingControl and Shift is not also pressed.
if (m_target.ActiveControl != null &&
m_target.ActiveControl is DataGridViewTextBoxEditingControl &&
(Keys)m.WParam == Keys.Enter &&
(Control.ModifierKeys & Keys.Shift) != Keys.Shift)
{
return true;
}
}
return false;
}
}
:
private KeyMessageFilter m_filter = null;
private void Form1_Load(object sender, EventArgs e)
{
m_filter = new KeyMessageFilter(this);
Application.AddMessageFilter(m_filter);
}
यहाँ संदेश फिल्टर वर्ग है
अब टेक्स्ट संपादित करते समय एंटर कुंजी अक्षम कर दी गई है और आपको अगले सेल पर जाने के लिए टैब कुंजी दबाएं। Shift + Enter अभी भी आपके द्वारा संपादित किए जा रहे पाठ में एक नई लाइन जोड़ता है।
उम्मीद है कि इससे मदद मिलती है।
धन्यवाद! आपके उत्तर ने सेल में एकाधिक लाइनों को अनुमति देने के मुद्दे को ठीक किया है, लेकिन दुर्भाग्यवश एंटर कुंजी अभी भी चयनित सेल को बदलती है। –
@Zach, ऊपर मेरे अपडेट और नमूना कोड देखें। – Ash
बस इसे स्पष्ट करने के लिए, अगर WrapMode सही पर सेट किया गया है तो एंटर कुंजी अभी भी अगली पंक्ति में चलेगी लेकिन अब आप पाठ में एक नई पंक्ति को एम्बेड करने के लिए Shift + Enter का उपयोग कर सकते हैं। यदि आप उस व्यवहार से खुश हैं तो संदेश फ़िल्टर की आवश्यकता नहीं है। – JonP
- 1. एंटर कुंजी
- 2. कुंजी दर्ज करें 'एंटर' कुंजी
- 3. एंटर कुंजी
- 4. एंटर कुंजी
- 5. मैं डेटाग्रिड व्यू को चयनित पंक्ति कैसे दिखा सकता हूं?
- 6. कैपिबरा: एंटर कुंजी
- 7. मैं सरणी में कुंजी मान जोड़े कैसे जोड़ सकता हूं?
- 8. एसीसी और एंटर कुंजी
- 9. मैं टैब कुंजी को एनएसटीक्स्ट व्यू से कैसे फोकस कर सकता हूं?
- 10. टेक्स्टटेरा में "एंटर" कुंजी कैसे बनाएं
- 11. Jquery एंटर कुंजी प्रेस
- 12. मैं JavaFX2 में दबाए गए एंटर कुंजी को कैसे उठा सकता हूं?
- 13. jQuery: एंटर कुंजी
- 14. एंटर कुंजी पर कीबोर्ड को छिपाने के लिए कैसे करें
- 15. मैं एक नई कुंजी जोड़ी कैसे बना सकता हूं और उन्हें फ़ाइलों में सहेज सकता हूं?
- 16. जब मेरा उपयोगकर्ता numpad एंटर कुंजी टैप करता है तो मैं एक डाउनकी कुंजी कैसे भेज सकता हूं?
- 17. मैं डेटाग्रिड व्यू पंक्तियों को एक दूसरे के नीचे खींच और छोड़ सकता हूं?
- 18. डेटाग्रिड व्यू - "नई" पंक्ति को कैसे छिपाना है?
- 19. डब्ल्यूपीएफ: डेटाग्रिड मैं मल्टी-लाइन टेक्स्ट
- 20. डेटाग्रिड व्यू वर्तमान चयनित ऑब्जेक्ट
- 21. वर्तमान लाइन को कैसे हटाएं और नोटपैड ++ में एक नई लाइन जोड़ें?
- 22. मैं हैश कुंजी को एकाधिक मान कैसे सौंप सकता हूं?
- 23. मैं एक कुंजी के लिए एकाधिक कुंजी के साथ एक शब्दकोश कैसे बना सकता हूं?
- 24. मैं एंटर कुंजी के साथ फॉर्म सबमिट कैसे अक्षम करूं?
- 25. डेटाग्रिड व्यू
- 26. सुझाव बॉक्स GWT एंटर कुंजी
- 27. स्ट्रीम में "एंटर कुंजी दबाएं" कैसे लिखें?
- 28. पता लगाएँ एंटर कुंजी jquery
- 29. मैं एडीओ.NET इकाई में बाधाओं को कैसे जोड़ सकता हूं?
- 30. मैं jQuery में एंटर कुंजी सबमिट कैसे रोकूं?
Hay, मुझे यह समाधान पसंद है। यह मेरे लिए काम किया है लेकिन एक चीज गायब है। मैं इस डेटाग्रिडव्यू टेक्स्टबॉक्स के समान पंक्तियों पर मौजूद सभी कक्षों की पंक्ति ऊंचाई कैसे बढ़ा सकता हूं। क्या यह संभव है?। स्पष्ट रूप से यह कुंजी प्रेस प्रेस पर भी होने की आवश्यकता होगी। –
माफ़ी, मेरी समस्या यह थी कि मेरी ऑटोोज़ीज़ पंक्तियों की संपत्ति सभी कोशिकाओं पर सेट की जा रही थी। Me.EditingControlDataGridView.Rows (EditingControlRowIndex) .इट + = 10 ने एक आकर्षण काम किया –