2009-02-08 10 views

Répondre

68

Peu importe si le texte est sélectionné, la propriété SelectionStart représente l'index dans le texte où vous Caret est assis. Vous pouvez donc utiliser String.Insert pour injecter un texte, comme ceci:

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

Comme 'Insert' renvoie une chaîne plutôt que de modifier l'original,' myTextBox.Text = myTextBox.Text.Insert (myTextBox.SelectionStart, "Hello World"); 'est nécessaire. – JYelton

+0

myTextBox.SelectionStart est disponible dans system.windows.forms ................... mais je cherche la même fonctionnalité dans WebFroms .. –

12

Vous voulez vérifier la propriété SelectionStart du TextBox.

1

Vous devez garder la propriété SelectionStart dans une variable, puis lorsque vous appuyez sur le bouton, déplacer le focus sur la zone de texte. Définissez ensuite la propriété SelectionStart sur celle de la variable.

2

Sur quel événement proposeriez-vous j'enregistrer la variable? Laisser?

Actuellement, j'ai:

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

Enregistrement sur l'événement Leave fonctionne, mais le texte ne soit pas inséré, suis-je manque quelque chose?

MISE À JOUR: je avais besoin textBoxSt1.Text =

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

Merci à tous.

Merci

5

James, il est assez inefficace que vous avez besoin de remplacer la chaîne entière lorsque vous ne voulez insérer du texte à la position du curseur.

Une meilleure solution serait:

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

Lorsque vous avez sélectionné rien, qui insère le nouveau texte à la position du curseur. Si vous avez quelque chose sélectionné, cela remplacera votre texte sélectionné avec le texte que vous souhaitez insérer.

Je trouve cette solution du eggheadcafe site.

4

Tout ce que vous avez à faire est la suivante:

Double cliquez sur l'élément (bouton, étiquette, peu importe) qui insérer du texte dans le document au niveau du curseur. Ensuite, tapez ceci dans:

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

Pour obtenir la position du curseur lorsque vous cliquez sur la souris dans le texte d'un TextBox, utilisez le TextBox événement MouseDown. Créez un point à l'aide des propriétés X et Y du MouseEventArgs. Le TextBox a une méthode appelée GetCharIndexFromPosition(point). Passez le point et il retourne la position du curseur. Cela fonctionne si vous utilisez la souris pour déterminer où vous souhaitez insérer le nouveau texte.

+0

-1: La question originale fait aucune mention de besoin de la position du curseur en réponse à un événement de souris, et la question a été répondue et acceptée en 2009. –

+0

Ha ha ... c'est un peu drôle. La question posée en fait sur la position du * curseur *, c'est donc une bonne réponse. Il est assez clair que la question voulait réellement la position du * caret * plutôt que du * curseur *, mais ce n'est pas ce qu'ils ont demandé. –

2

Voici ma réalisation de travail, alowing de ne taper que les chiffres, avec la restauration de la dernière position de saisie de texte valide:

Xaml:

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

code derrière:

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