私の問題について教えてください。テキストボックスの貼り付けをブロックし、すべての文字を数値 (WinRT) に制御したいと考えています。
1455 次
4 に答える
1
更新 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
の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;
}
于 2013-06-11T07:08:44.627 に答える
1
貼り付けをブロックするには: 1. 貼り付けイベントからブロックします。
txtBox1.Paste += ADDTextBox_Paste;
void ADDTextBox_Paste(object sender, TextControlPasteEventArgs e)
{e.Handled = true;return; }
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 に答える