"।" सहित सभी कुंजियों को संसाधित करने के लिए आप DataGridView के कॉम्बोबॉक्स बच्चे को कैसे प्राप्त कर सकते हैं?

नीचे सूचीबद्ध पदों में वर्णित एक ही समस्या है। यही है, जब तक कि मैं पहले स्पेसबार को हिट नहीं करता तब तक कुछ कुंजियां मेरे कम्बोबॉक्स में टाइप करते समय बिल्कुल काम नहीं करतीं। चाबियों में से एक "।" है, लेकिन दूसरा अक्षर "क्यू" है, और अन्य भी हैं: "$", "%"।

http://forums.microsoft.com/msdn/ShowPost.aspx?PostID=659716&SiteID=1
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2909173&SiteID=1&pageid=0
http://bytes.com/forum/thread548399.html

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

मेस्सिना - मुझे जासूस ++ के बारे में याद दिलाने के लिए धन्यवाद। "ए" अक्षर के लिए, संपादन विंडो अपने combobox माता-पिता को EN_UPDATE भेजती है। लेकिन, "क्यू" के लिए नहीं। यह बहुत अजीब है।

मैंने खुद को आश्वस्त किया है कि डेटाग्रिड व्यू कॉम्बो और संपादन को उप-वर्गीकृत नहीं कर रहा है, क्योंकि मैं सृजन के बाद और ग्रिड के संग्रह में जोड़ने से पहले, और बाद में जब मैं पेंट करता हूं तो wndprocs का पता जांचता हूं। जब तक ग्रिड कुछ प्रकार के वैश्विक हुक स्थापित नहीं करता ..

मुझे लगता है, हो सकता है कि मैं संपादन नियंत्रण को घटा सकूं, और उसके बाद कंटोबॉक्स को अधिसूचना भेजूं जिस तरह से मैं यहां संपादन नियंत्रण देखता हूं?

संपादित करें: यहां अधिक जानकारी। जासूस, combobox, और संपादन नियंत्रण से विंडोज संदेश, जासूस ++ से:

HWNDs: 122064e < grid 010d0674 < combobox 01360696 < combox's edit control

<01402> 01360696 P WM_KEYDOWN nVirtKey:'A' cRepeat:1 ScanCode:1E fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<01403> 010D0674 S WM_GETDLGCODE
<01404> 010D0674 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTCHARS
<01405> 010D0674 S WM_GETDLGCODE
<01406> 010D0674 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTCHARS
<01407> 010D0674 S WM_GETDLGCODE
<01408> 010D0674 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTCHARS
<01409> 010D0674 S WM_GETDLGCODE
<01410> 010D0674 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTCHARS
<01411> 01360696 P WM_CHAR chCharCode:'0061' (97) cRepeat:1 ScanCode:1E fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<01412> 010D0674 S WM_GETDLGCODE
<01413> 010D0674 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTCHARS
<01414> 010D0674 S WM_GETDLGCODE
<01415> 010D0674 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTCHARS

<01416> 010D0674 S WM_COMMAND wNotifyCode:EN_UPDATE wID:1001 hwndCtl:01360696  <<< edit control sends to combobox

<01417> 010D0674 S message:0x2111 [User-defined:WM_USER+7441] wParam:00060674 lParam:010D0674    What do these do?
<01418> 010D0674 R message:0x2111 [User-defined:WM_USER+7441] lResult:00000000

<01419> 010D0674 R WM_COMMAND
<01420> 010D0674 S WM_CTLCOLOREDIT hdcEdit:C7011AA6 hwndEdit:01360696
<01421> 010D0674 R WM_CTLCOLOREDIT hBrush:F0103EB0

<01422> 010D0674 S WM_COMMAND wNotifyCode:EN_CHANGE wID:1001 hwndCtl:01360696  << edit control sends to combobox

<01423> 010D0674 S message:0x2111 [User-defined:WM_USER+7441] wParam:00050674 lParam:010D0674

<01424> 0122064E S WM_PAINT hdc:00000000   <<< grid is told to paint
<01425> 0122064E S WM_ERASEBKGND hdc:94011D4E
<01426> 0122064E R WM_ERASEBKGND fErased:True
<01427> 0122064E S WM_GETTEXTLENGTH
<01428> 0122064E R WM_GETTEXTLENGTH cch:0
<01429> 0122064E S WM_GETTEXT cchTextMax:2 lpszText:0012D0C0
<01430> 0122064E R WM_GETTEXT cchCopied:0 lpszText:0012D0C0 ("")
<01431> 0122064E S WM_GETTEXTLENGTH
<01432> 0122064E R WM_GETTEXTLENGTH cch:0
<01433> 0122064E S WM_GETTEXT cchTextMax:2 lpszText:0012D0C0
<01434> 0122064E R WM_GETTEXT cchCopied:0 lpszText:0012D0C0 ("")
<01435> 010D0674 S WM_WINDOWPOSCHANGING lpwp:0012D4B0
<01436> 010D0674 R WM_WINDOWPOSCHANGING
<01437> 010D0674 S CB_GETCURSEL
<01438> 010D0674 R CB_GETCURSEL index:CB_ERR
<01439> 010D0674 S WM_GETTEXTLENGTH
<01440> 01360696 S WM_GETTEXTLENGTH
<01441> 01360696 R WM_GETTEXTLENGTH cch:2
<01442> 010D0674 R WM_GETTEXTLENGTH cch:2
<01443> 010D0674 S WM_GETTEXT cchTextMax:6 lpszText:0012CC44
<01444> 01360696 S WM_GETTEXT cchTextMax:6 lpszText:0012BE64
<01445> 01360696 R WM_GETTEXT cchCopied:2 lpszText:0012BE64 ("a")
<01446> 010D0674 R WM_GETTEXT cchCopied:2 lpszText:0012CC44 ("a")
<01447> 010D0674 S CB_GETCURSEL
<01448> 010D0674 R CB_GETCURSEL index:CB_ERR
<01449> 010D0674 S WM_GETTEXTLENGTH
<01450> 01360696 S WM_GETTEXTLENGTH
<01451> 01360696 R WM_GETTEXTLENGTH cch:2
<01452> 010D0674 R WM_GETTEXTLENGTH cch:2
<01453> 010D0674 S WM_GETTEXT cchTextMax:6 lpszText:0012CC44
<01454> 01360696 S WM_GETTEXT cchTextMax:6 lpszText:0012BE64
<01455> 01360696 R WM_GETTEXT cchCopied:2 lpszText:0012BE64 ("a")
<01456> 010D0674 R WM_GETTEXT cchCopied:2 lpszText:0012CC44 ("a")
<01457> 010D0674 S CB_GETCURSEL
<01458> 010D0674 R CB_GETCURSEL index:CB_ERR
<01531> 0122064E R WM_PAINT
<01532> 010D0674 S WM_PAINT hdc:00000000
<01533> 010D0674 S WM_NCPAINT hrgn:00000001
<01534> 010D0674 R WM_NCPAINT
<01535> 010D0674 S WM_ERASEBKGND hdc:0F0141ED
<01536> 010D0674 R WM_ERASEBKGND fErased:True
<01537> 0122064E S WM_CTLCOLOREDIT hdcEdit:840137F1 hwndEdit:010D0674
<01538> 0122064E R WM_CTLCOLOREDIT hBrush:F0103EB0
<01539> 010D0674 R WM_PAINT
<01540> 01360696 S WM_PAINT hdc:00000000
<01541> 01360696 S WM_NCPAINT hrgn:00000001
<01542> 01360696 R WM_NCPAINT
<01543> 01360696 S WM_ERASEBKGND hdc:C7011AA6
<01544> 01360696 R WM_ERASEBKGND fErased:True
<01545> 010D0674 S WM_CTLCOLOREDIT hdcEdit:870137F1 hwndEdit:01360696
<01546> 010D0674 R WM_CTLCOLOREDIT hBrush:F0103EB0
<01547> 010D0674 S WM_CTLCOLOREDIT hdcEdit:870137F1 hwndEdit:01360696
<01548> 010D0674 R WM_CTLCOLOREDIT hBrush:F0103EB0
<01549> 01360696 R WM_PAINT
<01555> 0122064E S WM_CTLCOLOREDIT hdcEdit:8A0137F1 hwndEdit:010306AC
<01556> 0122064E R WM_CTLCOLOREDIT hBrush:78103C5B
<01568> 010D0674 S CB_GETCURSEL
<01569> 010D0674 R CB_GETCURSEL index:CB_ERR
<01570> 010D0674 S WM_GETTEXTLENGTH
<01571> 01360696 S WM_GETTEXTLENGTH
<01572> 01360696 R WM_GETTEXTLENGTH cch:2
<01573> 010D0674 R WM_GETTEXTLENGTH cch:2
<01574> 010D0674 S WM_GETTEXT cchTextMax:6 lpszText:0012D7A4
<01575> 01360696 S WM_GETTEXT cchTextMax:6 lpszText:0012C9C4
<01576> 01360696 R WM_GETTEXT cchCopied:2 lpszText:0012C9C4 ("a")
<01577> 010D0674 R WM_GETTEXT cchCopied:2 lpszText:0012D7A4 ("a")
<01578> 010D0674 S CB_GETCURSEL
<01579> 010D0674 R CB_GETCURSEL index:CB_ERR
<01580> 010D0674 S WM_GETTEXTLENGTH
<01581> 01360696 S WM_GETTEXTLENGTH
<01582> 01360696 R WM_GETTEXTLENGTH cch:2
<01583> 010D0674 R WM_GETTEXTLENGTH cch:2
<01584> 010D0674 S WM_GETTEXT cchTextMax:6 lpszText:0012D6E0
<01585> 01360696 S WM_GETTEXT cchTextMax:6 lpszText:0012C900
<01586> 01360696 R WM_GETTEXT cchCopied:2 lpszText:0012C900 ("a")
<01587> 010D0674 R WM_GETTEXT cchCopied:2 lpszText:0012D6E0 ("a")
<01588> 010D0674 S CB_GETCURSEL
<01589> 010D0674 R CB_GETCURSEL index:CB_ERR
<01590> 010D0674 S WM_GETTEXTLENGTH
<01591> 01360696 S WM_GETTEXTLENGTH
<01592> 01360696 R WM_GETTEXTLENGTH cch:2
<01593> 010D0674 R WM_GETTEXTLENGTH cch:2
<01594> 010D0674 S WM_GETTEXT cchTextMax:6 lpszText:0012D6E0
<01595> 01360696 S WM_GETTEXT cchTextMax:6 lpszText:0012C900
<01596> 01360696 R WM_GETTEXT cchCopied:2 lpszText:0012C900 ("a")
<01597> 010D0674 R WM_GETTEXT cchCopied:2 lpszText:0012D6E0 ("a")
<01598> 010D0674 R message:0x2111 [User-defined:WM_USER+7441] lResult:00000000
<01599> 01360696 S WM_GETTEXTLENGTH
<01600> 01360696 R WM_GETTEXTLENGTH cch:2
<01601> 01360696 S WM_GETTEXT cchTextMax:6 lpszText:0012DF8C
<01602> 01360696 R WM_GETTEXT cchCopied:2 lpszText:0012DF8C ("a")
<01603> 010D0674 R WM_COMMAND
<01604> 01360696 P WM_KEYUP nVirtKey:'A' cRepeat:1 ScanCode:1E fExtended:0 fAltDown:0 fRepeat:1 fUp:1

पत्र क्यू

<01625> 01360696 P WM_KEYDOWN nVirtKey:'Q' cRepeat:1 ScanCode:10 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<01626> 010D0674 S WM_GETDLGCODE
<01627> 010D0674 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTCHARS
<01628> 010D0674 S WM_GETDLGCODE
<01629> 010D0674 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTCHARS
<01630> 010D0674 S WM_GETDLGCODE
<01631> 010D0674 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTCHARS
<01632> 010D0674 S WM_GETDLGCODE
<01633> 010D0674 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTCHARS
<01634> 01360696 P WM_CHAR chCharCode:'0071' (113) cRepeat:1 ScanCode:10 fExtended:0 fAltDown:0 fRepeat:0 fUp:0
<01635> 010D0674 S WM_GETDLGCODE
<01636> 010D0674 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTCHARS
<01637> 010D0674 S WM_GETDLGCODE
<01638> 010D0674 R WM_GETDLGCODE fuDlgCode:DLGC_WANTARROWS | DLGC_WANTCHARS
<01640> 01360696 P WM_KEYUP nVirtKey:'Q' cRepeat:1 ScanCode:10 fExtended:0 fAltDown:0 fRepeat:1 fUp:1
1
मैंने bytes.com मंच से उदाहरण की कोशिश की, और यह मेरे लिए काम नहीं किया। यदि आपके पास रेपो कदम हैं तो मुझे कुछ कोड स्पिन देने में खुशी होगी।
जोड़ा लेखक Cory Foy, स्रोत
मैं यहां <कोड> एस संदेश: 0x2111 [उपयोगकर्ता परिभाषित: WM_USER + 7441] की मीटिंग की तलाश में आया था, लेकिन वैसे भी मैं शर्त लगाता हूं कि मैं अनुमान लगा सकता हूं कि क्या हो रहा है। जिन कुंजी को आप याद कर रहे हैं वे पहले ही मैप किए गए हैं। शायद Ctrl + Q = छोड़ें। Combox अच्छी तरह से हॉटकी हैंडलिंग नहीं कर रहा है।
जोड़ा लेखक John Smith, स्रोत

2 उत्तर

किसी भी मौके से, क्या आपने अपनी समस्या हल कर ली है?

मुझे आपकी जैसी ही समस्या है, डेटाग्रिड व्यू के लिए मेरा कस्टम नियंत्रण पत्र क्यू, अवधि, डॉलर, एकल उद्धरण, प्रतिशत इत्यादि नहीं प्राप्त कर सकता है।

मैं "स्विच .. डिफ़ॉल्ट: बदले में झूठ" को बदलकर समस्या को हल करने में सक्षम था .. डिफ़ॉल्ट: वापसी! डेटा GridViewWantsInputKey "

मुझे लगता है कि डेटाग्रिडव्यू के लिए अपना खुद का उपयोगकर्ता नियंत्रण बनाने के लिए माइक्रोसॉफ्ट से पैटर्न कोड इष्टतम नहीं है। यह माइक्रोसॉफ्ट से पैटर्न कोड है:

http://msdn.microsoft.com/en-au /library/7tas5c80(vs.80).aspx

public bool EditingControlWantsInputKey(
    Keys key, bool dataGridViewWantsInputKey)
{
   //Let the DateTimePicker handle the keys listed.
    switch (key & Keys.KeyCode)
    {
        case Keys.Left:
        case Keys.Up:
        case Keys.Down:
        case Keys.Right:
        case Keys.Home:
        case Keys.End:
        case Keys.PageDown:
        case Keys.PageUp:
            return true;
        default:
            return false;//I changed this to: return !dataGridViewWantsInputKey.  My usercontrol can now receive Q, period, dollar, etc.
    }
}
1
जोड़ा
मैंने समस्या हल नहीं की है। मैंने आपके समाधान की कोशिश की है और यह मेरे लिए काम नहीं कर रहा है, और इसके बारे में सोचने के बाद, मैं आश्चर्यचकित नहीं हूं। मैं हेडर में combobox का उपयोग कर रहा हूँ, एक नियमित सेल नहीं। मुझे नहीं लगता कि मेरी ग्रिड अपने कम्बोबॉक्स के बारे में पर्याप्त जानकारी जानता है और इसके IDataGridViewEditingControl इंटरफ़ेस का उपयोग करने के लिए पर्याप्त है। मेरा मतलब है, मुझे लगता है कि मुझे इस समस्या से ज्यादा समस्याएं हैं। मैं वैसे भी स्वीकार किए गए एक के रूप में आपका जवाब चिह्नित करने जा रहा हूं।
जोड़ा लेखक Corey Trager, स्रोत

मेरे प्रश्न का आंशिक जवाब। Combobox में मैं KeyDown, TextChanged, और KeyUp ईवेंट को संभालता हूं, जो उस क्रम में आग लगती है। यदि मैं टेक्स्टडैंग के साथ कीडाउन से कीअप पर जाता हूं, तो मैं जांचता हूं कि चरित्र एक Keys.Q या Keys.OemPeriod था या नहीं। (मुझे यकीन नहीं है कि यह दूसरों के लिए सुरक्षित है, जैसे शिफ्ट/डी 1, शिफ्ट/डी 2, आदि ...)। यदि यह उन चाबियों में से एक है, तो मैं खुद को combobox टेक्स्ट बदलता हूं।

लेकिन यह पर्याप्त नहीं है, क्योंकि पाठ को बदलने से टेक्स्ट की शुरुआत में कर्सर को संपादन नियंत्रण (जो combobox से संबंधित है) में सेट करता है। इसलिए, इसे ठीक करने के लिए, मैं संपादन नियंत्रण के हैंडल प्राप्त करने के लिए FindWindowEx का उपयोग करता हूं, फिर कर्सर को शब्द के अंत में रीसेट करने के लिए इसे एक EM_SETSEL भेजता हूं।

0
जोड़ा