J'ai une zone de texte WinForms standard et je veux insérer du texte à la position du curseur dans le texte. Comment puis-je obtenir la position du curseur?
Merci
Indépendamment du choix du texte, la propriété SelectionStart représente l'index dans le texte où vous vous trouvez. Vous pouvez donc utiliser String.Insert pour injecter du texte, comme ceci:
myTextBox.Text = myTextBox.Text.Insert(myTextBox.SelectionStart, "Hello world");
Vous voulez vérifier la propriété SelectionStart
de la TextBox
.
James, il est assez inefficace de devoir remplacer toute la chaîne lorsque vous souhaitez uniquement insérer du texte à la position du curseur.
Une meilleure solution serait:
textBoxSt1.SelectedText = ComboBoxWildCard.SelectedItem.ToString();
Lorsque vous n'avez rien sélectionné, le nouveau texte sera inséré à la position du curseur . Si vous avez sélectionné un élément, cela remplacera le texte sélectionné par le texte que vous souhaitez insérer.
J'ai trouvé cette solution sur le site eggheadcafe .
Tout ce que vous avez à faire est ceci:
Double-cliquez sur l'élément (bouton, étiquette, peu importe) qui insérera du texte dans le document au niveau du curseur. Puis tapez ceci dans:
richTextBox.SelectedText = "whatevertextyouwantinserted";
Sur quel événement suggéreriez-vous que j'enregistre 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;
}
L'enregistrement sur l'événement Leave fonctionne mais le texte n'est pas inséré. Quelque chose me manque-t-il?
UPDATE: J'avais besoin de textBoxSt1.Text =
textBoxSt1.Text = textBoxSt1.Text.Insert(intCursorPos, comboBoxWildCard.SelectedItem.ToString());
Merci a tous.
Merci
Voici ma réalisation de travail, permettant de ne taper que des chiffres, avec la restauration de la dernière position 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;
}
}
Vous devez conserver la propriété SelectionStart
dans une variable, puis lorsque vous appuyez sur le bouton, rétablissez le focus sur la zone de texte. Définissez ensuite la propriété SelectionStart
sur celle de la variable.
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 avec la souris dans le texte d'une TextBox
, utilisez l'événement TextBox
MouseDown
. Créez un point en utilisant les propriétés X et Y de la MouseEventArgs
. La 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 voulez insérer le nouveau texte.