2009-02-08 7 views
44

मेरे पास एक मानक WinForms टेक्स्टबॉक्स है और मैं टेक्स्ट में कर्सर की स्थिति में टेक्स्ट डालना चाहता हूं। मैं कर्सर की स्थिति कैसे प्राप्त कर सकता हूं?मुझे टेक्स्ट बॉक्स में कर्सर की स्थिति कैसे मिल सकती है? सी #

धन्यवाद

+0

आप स्थिति की आवश्यकता है सभी स्क्रीन पर, या फार्म पर? – Avram

+0

क्या आप मुझे अंतिम पोस्ट नीचे पढ़ सकते हैं? धन्यवाद –

उत्तर

68

चाहे कोई भी पाठ चुना गया हो, SelectionStart संपत्ति उस टेक्स्ट में इंडेक्स का प्रतिनिधित्व करती है जहां आप बैठते हैं। तो अगर आप इस तरह, कुछ पाठ सुई String.Insert उपयोग कर सकते हैं:

myTextBox.Text = myTextBox.Text.Insert(myTextBox.SelectionStart, "Hello world"); 
+7

चूंकि 'सम्मिलित करें' मूल को संशोधित करने के बजाय स्ट्रिंग देता है, 'myTextBox.Text = myTextBox.Text.Insert (myTextBox.SelectionStart, "हैलो वर्ल्ड");' आवश्यक है। – JYelton

+0

myTextBox.SelectionStart system.windows.forms में उपलब्ध है ................... लेकिन मैं WebFroms में समान कार्यक्षमता की तलाश में हूं .. –

12

आप TextBox की SelectionStart संपत्ति की जांच करना चाहते।

1

आप एक चर में SelectionStart संपत्ति रखने के लिए, और फिर जब आप बटन दबाते हैं, फोकस वापस पाठ बॉक्स में बदलाव। फिर SelectionStart संपत्ति को चर में से एक पर सेट करें।

2

आप किस घटना पर सुझाव देंगे कि मैं चर रिकॉर्ड करता हूं? छोड़ना?

वर्तमान में मेरे पास है: छोड़ दो घटना पर

private void comboBoxWildCard_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    textBoxSt1.Focus(); 
    textBoxSt1.Text.Insert(intCursorPos, comboBoxWildCard.SelectedItem.ToString()); 

} 

private void textBoxSt1_Leave(object sender, EventArgs e) 
{ 
    intCursorPos = textBoxSt1.SelectionStart; 
} 

रिकॉर्डिंग काम कर रहा है, लेकिन पाठ डाला नहीं होता है, मैं कुछ याद आ रही है?

अद्यतन: मैं जरूरत सभी textBoxSt1.Text =

textBoxSt1.Text = textBoxSt1.Text.Insert(intCursorPos, comboBoxWildCard.SelectedItem.ToString()); 

धन्यवाद।

धन्यवाद

5

जेम्स, यह बहुत अक्षम है कि आप पूरी स्ट्रिंग प्रतिस्थापित करने की आवश्यकता है जब आप केवल कर्सर स्थिति पर कुछ पाठ सम्मिलित करना चाहते हैं।

एक बेहतर समाधान हो जाएगा:

textBoxSt1.SelectedText = ComboBoxWildCard.SelectedItem.ToString(); 

आपके द्वारा चयनित कुछ भी नहीं है, कि कर्सर स्थिति पर नया पाठ जोड़ दिया जाएगा। यदि आपके पास कुछ चुना गया है, तो यह आपके चयनित टेक्स्ट को उस पाठ के साथ बदल देगा जिसे आप सम्मिलित करना चाहते हैं।

मुझे यह समाधान eggheadcafe site से मिला है।

डबल आइटम पर क्लिक करें (बटन, लेबल, जो कुछ भी) कि कर्सर पर दस्तावेज़ में पाठ सम्मिलित होगा:

4

आपको बस इतना करना है यह है। तो फिर इस टाइप करें:

richTextBox.SelectedText = "whatevertextyouwantinserted"; 
1
int cursorPosition = textBox1.SelectionStart; 
//it will extract your current cursor position where ever it is 
//textBox1 is name of your text box. you can use one 
//which is being used by you in your form 
0

कैरट स्थिति प्राप्त करने के लिए जब आप एक TextBox के टेक्स्ट में माउस क्लिक करें, TextBoxMouseDown घटना का उपयोग करें। MouseEventArgs के एक्स और वाई गुणों का उपयोग करके एक बिंदु बनाएं। TextBox में GetCharIndexFromPosition(point) नामक एक विधि है। इसे बिंदु पास करें और यह कैरेट की स्थिति लौटाता है। यह काम करता है यदि आप यह निर्धारित करने के लिए माउस का उपयोग कर रहे हैं कि आप नया टेक्स्ट कहां डालना चाहते हैं।

+0

-1: मूल प्रश्न बनाता है माउस ईवेंट के जवाब में कर्सर की स्थिति की आवश्यकता का कोई जिक्र नहीं है, और सवाल का जवाब दिया गया था और 200 9 में स्वीकार किया गया था। –

+0

हा हा ... यह थोड़ा मजाकिया है। वास्तव में * कर्सर * की स्थिति के बारे में सवाल पूछा गया, इसलिए यह एक अच्छा जवाब है। यह बहुत स्पष्ट है कि सवाल वास्तव में * कर्सर * की बजाय * कैरेट * की स्थिति चाहता था, लेकिन यही वह नहीं है जिसे उन्होंने पूछा था। –

2

यहाँ मेरे कार्य प्राप्ति है, पिछले वैध टाइपिंग पाठ स्थिति बहाल करने के साथ, केवल अंक टाइप करने के लिए alowing:

Xaml:

<TextBox 
     Name="myTextBox" 
     TextChanged="OnMyTextBoxTyping" /> 

कोड के पीछे:

private void OnMyTextBoxTyping(object sender, EventArgs e) 
{ 
    if (!System.Text.RegularExpressions.Regex.IsMatch(myTextBox.Text, @"^[0-9]+$")) 
    { 
     var currentPosition = myTextBox.SelectionStart; 
     myTextBox.Text = new string(myTextBox.Text.Where(c => (char.IsDigit(c))).ToArray()); 
     myTextBox.SelectionStart = currentPosition > 0 ? currentPosition - 1 : currentPosition; 
    } 
} 
संबंधित मुद्दे