Come trovo la posizione di un cursore in una casella di testo? C #

Ho un TextBox standard di WinForms e voglio inserire del testo nella posizione del cursore nel testo. Come posso ottenere la posizione del cursore?

Grazie

Indipendentemente dal fatto che sia selezionato un testo, la proprietà SelectionStart rappresenta l’indice nel testo in cui si inserisce il cursore. Quindi puoi usare String.Insert per iniettare del testo, come questo:

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

Si desidera verificare la proprietà SelectionStart del TextBox .

James, è piuttosto inefficiente che tu debba sostituire l’intera stringa quando vuoi solo inserire del testo nella posizione del cursore.

Una soluzione migliore sarebbe:

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

Quando non hai selezionato nulla, questo inserirà il nuovo testo nella posizione del cursore. Se hai qualcosa selezionato, questo sostituirà il testo selezionato con il testo che vuoi inserire.

Ho trovato questa soluzione dal sito eggheadcafe .

Tutto ciò che devi fare è questo:

Fare doppio clic sull’elemento (pulsante, etichetta, qualsiasi cosa) che inserirà il testo nel documento sul cursore. Quindi digita questo in:

 richTextBox.SelectedText = "whatevertextyouwantinserted"; 

Su quale evento suggeriresti di registrare la variabile? Partire?

Attualmente ho:

 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; } 

La registrazione sull’evento Leave funziona ma il testo non viene inserito, mi manca qualcosa?

AGGIORNAMENTO: avevo bisogno di textBoxSt1.Text =

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

Ringrazia tutti.

Grazie

Ecco la mia realizzazione operativa, che consente di digitare solo cifre, con il ripristino dell’ultima posizione del testo di digitazione valida:

xaml:

  

Codice dietro:

 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; } } 
 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 

È necessario mantenere la proprietà SelectionStart in una variabile, quindi quando si preme il pulsante, spostare lo stato attivo sul TextBox. Quindi imposta la proprietà SelectionStart su quella nella variabile.

Per ottenere la posizione del punto di inserimento quando si fa clic con il mouse all’interno del testo di un TextBox , utilizzare l’evento MouseDown TextBox . Creare un punto usando le proprietà X e Y di MouseEventArgs . Il TextBox ha un metodo chiamato GetCharIndexFromPosition(point) . Passa il punto e restituisce la posizione del cursore. Funziona se si utilizza il mouse per determinare dove si desidera inserire il nuovo testo.