2010-06-03 2 views
5

बहुत सारे एप्लिकेशन हैं जो आपको Alt कुंजी दबाए जाने पर माउस के साथ सफाई करके टेक्स्ट का एक बॉक्स या आयत चुनने की अनुमति देते हैं। उदाहरण के लिए, विजुअल स्टूडियो 2010 कोड संपादक में ऐसा करता है। Emacs यह करता है। Winword यह करता है। हमने इसे सब देखा है। ऐसा लगता है कि इस व्यवहार को एन्कोड करने के लिए एक मानक पैटर्न होना चाहिए लेकिन मुझे यह प्रतीत नहीं होता है।Alt-Left-Mouse sweep के साथ RichTextBox में एक आयताकार चयन करना?

मुझे लगता है मैं सब मैं हो रही है के रूप में सही खोजशब्दों के साथ Googling नहीं कर रहा हूँ आयत पर झूठी हिट हैं, Alt-वाम, झाडू, चयन, आदि

मुझे यकीन है कि मैं इसे कोड कर सकते हैं, लेकिन यह इसका मतलब होगा, रिचटेक्स्टबॉक्स में इस्तेमाल किए गए सामान्य चयन कोड को अक्षम करना। और यह बदसूरत लगता है, त्रुटि प्रवण और संभवतः इससे अधिक काम करने लायक है।

किसी के पास कोई सुझाव है (अच्छा हो! :-)) यह कैसे करें या यह कैसे किया जाता है इसका एक उदाहरण है?

अद्यतन: Column based selection

+0

मेरे पास कोई जवाब नहीं है लेकिन सिर्फ टिप के लिए धन्यवाद कहना चाहता था, कभी नहीं देखा कि आप इससे पहले ऐसा कर सकते हैं ....... –

+0

हाँ, यह शायद ही कभी विज्ञापित है लेकिन जब आपको इसकी आवश्यकता होती है, तो कुछ और नहीं होगा कर। –

उत्तर

4

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

मुख्य समस्या यह है कि आप चयन सुविधा का उपयोग नहीं कर सकते हैं, यह हमेशा लाइनों को फैलाता है। SelectionBackColor प्रॉपर्टी का उपयोग करके आपको इसे नकली करना होगा। माउसडाउन और माउसमोव इवेंट्स को कार्यान्वित करें, यह देखने के लिए कि नियंत्रण ALT कुंजी नीचे है या नहीं। Control.Modifiers प्रॉपर्टी की जांच करें। क्या चुना जा रहा है यह देखने के लिए GetCharIndexFromPosition का उपयोग करें। चाल घटना में, स्तंभों और पंक्तियों के माध्यम से लूप जो चयन/चार्ट का चयन करते हैं, चयन चयन, चयन लम्बाई और चयनबैक रंग गुण गुणों को रंगीन करने के लिए।

यह एक सस्ते मोटल की तरह झिलमिलाहट करेगा। P/इससे बचने के लिए पहले और बाद में WM_SETREDRAW संदेश भेजने के लिए SendMessage() को आमंत्रित करें।

चयन के साथ कुछ करना चुनौतीपूर्ण है। आपको उप-श्रेणी आरटीबी की आवश्यकता होगी ताकि आप WndProc() को ओवरराइड कर सकें और WM_COPY, WM_CUT, WM_PASTE संदेशों का पता लगा सकें। अन्य यादृच्छिक समस्या ऑटो-स्क्रॉलिंग होती है जब माउस नियंत्रण के ऊपर या नीचे के करीब आता है और जब कोई अन्य चयन किया जाता है तो चयन रद्द नहीं किया जाता है।

या आप एक वास्तविक संपादक का उपयोग कर सकते हैं, जैसे ScintillaNET। सब कुछ और, इस जवाब के रूप में सवाल के रूप में कई upvotes पाने की संभावना नहीं है।

+0

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

+0

ठीक है, मैंने आपको 8 घंटे के काम को बचाया। अनुपयोगी? –

+0

हाँ, बहुत उपयोगी! –