2010-03-23 8 views
8

मैं कैरेट 4 पदों को उस स्थान पर ले जाना चाहता हूं जहां मेरी देखभाल वर्तमान में है। मैं PreviewKeyDown के लिए पंजीकृत कर रहा हूँ, और बुला InsertTextInRun() जब टैब कुंजी तो तरह कब्जा कर लिया है,:मैं WPF RichTextBox में कैरेट को कुछ निश्चित पदों को कैसे स्थानांतरित करूं?

private void rtb_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Tab) 
    { 
     rtb.CaretPosition.InsertTextInRun(" "); 
     e.Handled = true; 
    } 
} 

समस्या यह है कि कैरट InsertTextInRun() करने के लिए कॉल के बाद जगह में रहता है। यह नए पाठ के अंत तक चलता है, जो मैं चाहता हूं कि व्यवहार है। यह मैं कैसे करूंगा?


एक अलग रूप में के रूप में - हाँ, मैं RichTextBox पर AcceptsTab संपत्ति के बारे में पता है। मैं अनदेखा करना चुन रहा हूं और अपनी खुद की टैब कार्यक्षमता रोल कर रहा हूं क्योंकि AcceptsTab के साथ टैबबिंग के बाद की लाइनों पर इंडेंटिंग टेक्स्ट का बुरा दुष्प्रभाव है, जो नहीं है जो मैं चाहता हूं।

उत्तर

8

मैं बस एक ही समस्या में फंस गया हूं। ऐसा लगता है कि अंतिम देखभाल स्थिति इस बात पर निर्भर करती है कि यह डालने से ठीक पहले किस तरह से आगे बढ़ रहा था।

के बाद कोड बनाता है यकीन है कि (3.5sp1) कि डालने के बाद, कर्सर डाला पाठ के अधिकार के लिए होगा:

rtb.CaretPosition = rtb.CaretPosition.GetPositionAtOffset(0, LogicalDirection.Forward); 
rtb.CaretPosition.InsertTextInRun(text); 

ध्यान दें कि कैरट के LogicalDirection संपत्ति (और करने के लिए किया गया है) इस से बदला जा सकता है ; यह सही टेक्स्ट पॉइंटर बनाने के लिए पर्याप्त नहीं है।

1

CaretPosition TextPointer पर GetInsertionPosition() विधि का उपयोग करें। यह आपको कैरेट से पहले टेक्स्ट डालने की अनुमति देगा।

private void rtb_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    if (e.Key == Key.Tab) 
    { 
     rtb.CaretPosition.GetInsertionPosition(LogicalDirection.Backward).InsertTextInRun(" "); 
     e.Handled = true; 
    } 
} 
+0

वाह, मुझे यह याद करना होगा! मैं जल्द ही कोशिश करूँगा, धन्यवाद! :) –

+1

क्षमा करें, कोई पासा नहीं। कैरेट सम्मिलित पाठ के अंत में नहीं चला था। –

+0

मेरे लिए काम नहीं किया था, केवल समाधान जो काम करता है स्वीकार्य समाधान है। – ToastyMallows

1

परीक्षण करने के लिए, आप अपने आप को आंदोलन के लिए मजबूर की कोशिश कर सकते:

rtb.CaretPosition = rtb.Document.ContentEnd; 

अगर वह काम करता है, तो आप शायद स्थितियों के लिए अतिरिक्त तर्क लागू करने के लिए जहां टैब सामग्री के अंत में नहीं है होगा।

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