2009-02-08 16 views

risposta

68

Indipendentemente dal fatto che sia selezionato un testo, la proprietà SelectionStart rappresenta l'indice nel testo in cui si trova il punto di inserimento. Così si può utilizzare String.Insert per iniettare un po 'di testo, in questo modo:

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

Poiché 'Insert' restituisce una stringa piuttosto che modificare l'originale,' myTextBox.Text = myTextBox.Text.Insert (myTextBox.SelectionStart, "Hello World"); 'è necessario. – JYelton

+0

myTextBox.SelectionStart è disponibile in system.windows.forms ................... ma sto cercando la stessa funzionalità in WebFroms .. –

12

si desidera controllare la proprietà SelectionStart del TextBox.

1

Bisogna mantenere la proprietà SelectionStart in una variabile, e poi, quando si preme il pulsante, sposta l'attenzione torna alla casella di testo. Quindi imposta la proprietà SelectionStart su quella nella variabile.

2

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

di registrazione per l'evento Leave funziona, ma il testo non viene inserito, mi sto perdendo qualcosa?

UPDATE: avevo bisogno textBoxSt1.Text =

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

Grazie a tutti.

Grazie

5

James, è abbastanza inefficiente che è necessario sostituire l'intera stringa in cui desideri solo inserire del testo nella posizione del cursore.

Una soluzione migliore sarebbe:

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

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

Ho trovato questa soluzione dal eggheadcafe site.

4

Tutto quello che dovete fare è questo:

doppio clic sulla voce (tasto, etichetta, a prescindere) che inserirà il testo nel documento in corrispondenza del cursore. Quindi digitare questo:

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

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 TextBoxMouseDown. 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.

+0

-1: la domanda originale rende nessuna menzione di aver bisogno della posizione del cursore in risposta a un evento del mouse, e la domanda è stata risolta e accettata nel 2009. –

+0

Ha ha ... questo è un po 'divertente. La domanda effettivamente posta sulla posizione del * cursore *, quindi questa è una specie di buona risposta. È abbastanza chiaro che la domanda in realtà voleva la posizione del * segno di omissione * piuttosto che il * cursore *, ma non è quello che chiedevano. –

2

Qui è la mia realizzazione di lavoro, alowing digitare solo cifre, con il ripristino ultima valida posizione del testo di digitazione:

Xaml:

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

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