Juste quelques modifications de @ code de Fredrik, depuis que je suis en train à la fois de ses méthodes.
La première est juste une version raccourcie
private void TextBox_Pasting(object sender, DataObjectPastingEventArgs e)
{
string clipboard = e.DataObject.GetData(typeof(string)) as string;
Regex nonNumeric = new System.Text.RegularExpressions.Regex (@"\D");
string result = nonNumeric.Replace(clipboard, string.Empty);
int caret = CaretIndex;
Text = Text.Substring(0, SelectionStart) + result +
Text.Substring(SelectionStart + SelectionLength);
CaretIndex = caret + result.Length;
e.CancelCommand();
}
et l'autre est mis à jour en gardant le contenu du presse-papiers
private string oldClipboardContent { get; set; } = "";
private bool pasteModified { get; set; } = false;
private void TextBox_Pasting(object sender, DataObjectPastingEventArgs e)
{
if (pasteModified)
{
pasteModified = false;
}
else
{
pasteModified = true;
string text = (string)e.DataObject.GetData(typeof(string));
oldClipboardContent = text;
Regex nonNumeric = new System.Text.RegularExpressions.Regex (@"\D");
text = nonNumeric.Replace(text, string.Empty);
e.CancelCommand();
Clipboard.SetData(DataFormats.Text, text);
ApplicationCommands.Paste.Execute(text, this);
Clipboard.SetData(DataFormats.Text, OldClipboardContent);
oldClipboardContent = "";
}
}
j'utilisais ceux à l'intérieur de mon contrôle personnalisé TextBox
, c'est pourquoi je pourrait accéder à TextBox
propriétés sans écrire le nom en premier.
Oui, je pensais aussi à votre première méthode. La deuxième méthode est considérablement pire, puisque vous modifiez le contenu du Presse-papiers. De toute façon, c'est exactement ce que je cherchais, merci! – Dave
Merci pour la réponse. Je veux juste poster une version plus courte de la première méthode (de 9 lignes à 3 lignes): 'int caret = uiTextBox.CaretIndex; uiTextBox.Text = uiTextBox.Text.Insert (uiTextBox.SelectionStart, résultat); uiTextBox.CaretIndex = caret + result.Length; ' – newman
Sender est la zone de texte dans laquelle l'événement paste se produit, donc plutôt que d'avoir à référencer explicitement une zone de texte particulière, vous pouvez simplement lancer l'expéditeur en tant que TextBox (ou autre) . – Will