Как я могу заблокировать вставку текста в моем TextBox (WinRT)?
Не могли бы вы помочь мне, пожалуйста, о моей проблеме? Я хочу заблокировать вставку моего текстового поля и контролировать все символы числовые (WinRT).
4 ответа
Начиная с Windows 8.1, вы получаете событие "Вставить", на которое вы можете подписаться. Просто подпишитесь на него и установите событие Handled
собственность на true
чтобы остановить его от достижения TextBox.
ОБНОВЛЕНИЕ 1
Если вы хотите предотвратить комбинацию ctrl + c & ctrl + v, вы должны проверить эту комбинацию в KeyDown
событие. Если вы получите эту комбинацию, вы можете очистить буфер обмена статическим методом. Windows.ApplicationModel.DataTransfer.Clipboard.Clear();
Если вы не смотрите комбинацию клавиш, а не просто Ctrl, то вы также можете предотвратить вставку копии с клавиатуры.
private void TextBox_KeyDown_1(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Control)
Windows.ApplicationModel.DataTransfer.Clipboard.Clear();
}
Чтобы позволить пользователю вводить только числовые данные, которые вы можете использовать TextBox
"s TextChanged
событие. Используйте только числовое регулярное выражение, чтобы отфильтровать символы. Кроме того, чтобы отключить контекстное меню TextBox
, ContextMenuOpening
событие поможет вам. Ниже весь код.
XAML
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<TextBox Height="50" Width="300" TextChanged="TextBox_TextChanged_1" ContextMenuOpening="TextBox_ContextMenuOpening_1" />
</Grid>
C#
private void TextBox_TextChanged_1(object sender, TextChangedEventArgs e)
{
var tb = (TextBox)sender;
var IsNumeric = new System.Text.RegularExpressions.Regex("^[0-9]*$");
var text = tb.Text;
if (!IsNumeric.IsMatch(text))
{
int CursorIndex = tb.SelectionStart - 1;
tb.Text = tb.Text.Remove(CursorIndex, 1);
tb.SelectionStart = CursorIndex;
tb.SelectionLength = 0;
}
}
private void TextBox_ContextMenuOpening_1(object sender, ContextMenuEventArgs e)
{
e.Handled = true;
}
Чтобы заблокировать вставку:1. Заблокируйте это от события вставки
txtBox1.Paste += ADDTextBox_Paste;
void ADDTextBox_Paste(object sender, TextControlPasteEventArgs e)
{e.Handled = true;return; }
Заблокируйте событие Keydown для shift + insert и Ctrl + V.
void txtBox1_KeyDown(object sender, KeyRoutedEventArgs e) { var shiftState = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Shift); var ctrlState = CoreWindow.GetForCurrentThread().GetKeyState(VirtualKey.Control); if (((shiftState & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down && e.Key == VirtualKey.Insert) ||((ctrlState & CoreVirtualKeyStates.Down) == CoreVirtualKeyStates.Down && e.Key == VirtualKey.V)) { e.Handled = true; return; } }
Чтобы разрешить только числовые символы, вам нужно добавить этот код в событие Keydown:
if ((e.Key < VirtualKey.Number0 || e.Key > VirtualKey.Number9) &&
(e.Key < VirtualKey.NumberPad0 || e.Key > VirtualKey.NumberPad9))
{ e.handled = true; return; }
Используйте Shift A, чтобы заблокировать весь проход. Переместите стрелку вверх или вниз, чтобы заблокировать мелкие детали. Щелкните правой кнопкой мыши на заблокированном проходе, чтобы скопировать и вставить.