J'ai un TextBox standard WinForms et je veux insérer du texte à la position du curseur dans le texte. Comment puis-je obtenir la position du curseur?Comment trouver la position d'un curseur dans une zone de texte? C#
Merci
J'ai un TextBox standard WinForms et je veux insérer du texte à la position du curseur dans le texte. Comment puis-je obtenir la position du curseur?Comment trouver la position d'un curseur dans une zone de texte? C#
Merci
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");
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
myTextBox.SelectionStart est disponible dans system.windows.forms ................... mais je cherche la même fonctionnalité dans WebFroms .. –
Vous voulez vérifier la propriété SelectionStart
du TextBox
.
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.
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
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.
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";
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
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.
-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. –
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é. –
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;
}
}
avez-vous besoin Position sur tout l'écran ou sur le formulaire? – Avram
Pourriez-vous me lire le message suivant? Merci –