Как я могу заблокировать вставку текста в моем 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; }
  1. Заблокируйте событие 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, чтобы заблокировать весь проход. Переместите стрелку вверх или вниз, чтобы заблокировать мелкие детали. Щелкните правой кнопкой мыши на заблокированном проходе, чтобы скопировать и вставить.

Другие вопросы по тегам