Sólo algunas modificaciones del código de Fredrik @, ya que he estado probando ambos de sus métodos.
El primero es simplemente una versión abreviada
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();
}
y el otro se actualiza manteniendo el contenido del portapapeles
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 = "";
}
}
yo estaba usando los que están dentro de mi control personalizado TextBox
, es por eso que podría acceder a TextBox
propiedades sin escribir el nombre primero.
Sí, yo también estaba pensando en la línea de su primer método. El segundo método es considerablemente peor, ya que está modificando el contenido del Portapapeles. De cualquier manera, esto es exactamente lo que estaba buscando, ¡gracias! – Dave
Gracias por la respuesta. Solo quiero publicar una versión más corta del primer método (de 9 líneas a 3 líneas): 'int caret = uiTextBox.CaretIndex; uiTextBox.Text = uiTextBox.Text.Insert (uiTextBox.SelectionStart, result); uiTextBox.CaretIndex = currículum + resultado.Length; ' – newman
Remitente es el cuadro de texto en el que se produce el evento pegar, por lo que en lugar de tener que hacer referencia explícitamente a un cuadro de texto en particular, puede emitir el remitente como' TextBox' (o lo que sea) . – Will