1

私の問題について教えてください。テキストボックスの貼り付けをブロックし、すべての文字を数値 (WinRT) に制御したいと考えています。

4

4 に答える 4

1

更新 1

ctrl+cctrl+の組み合わせを防ぎたい場合は、イベント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();
}

ユーザーが数値データのみを入力できるようにするには、TextBoxTextChangedイベントを使用できます。文字を除外するには、数値のみの正規表現を使用します。さらに、 のコンテキスト メニューを無効にするにはTextBoxContextMenuOpeningイベントが役立ちます。以下はコード全体です。

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;
}
于 2013-06-11T07:08:44.627 に答える
1

貼り付けをブロックするには: 1. 貼り付けイベントからブロックします。

    txtBox1.Paste += ADDTextBox_Paste;

    void ADDTextBox_Paste(object sender, TextControlPasteEventArgs e) 
    {e.Handled = true;return; }
  1. Shift + Insert および Ctrl + V の Keydown イベントをブロックします。

    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; }
于 2015-06-23T13:06:42.990 に答える