#c_sharp #net #wpf
Как наиболее правильно запретить ввод в TextBox символов любой раскладки кроме английской и цифр. Желательно не сравнивая в цикле каждый символ строки с шаблоном. private void validationTextBox_KeyDown(object sender, KeyEventArgs e) { TextBox a = (TextBox)sender; if (e.Key < Key.D0 || e.Key > Key.F) e.Handled = true; //code }
Ответы
Ответ 1
У меня работает код, основанный на этом ответе:void OnPreviewTextInput(object sender, TextCompositionEventArgs e) { e.Handled = !e.Text.All(IsGood); } private void OnPasting(object sender, DataObjectPastingEventArgs e) { var stringData = (string)e.DataObject.GetData(typeof(string)); if (stringData == null || !stringData.All(IsGood)) e.CancelCommand(); } bool IsGood(char c) { if (c >= '0' && c <= '9') return true; if (c >= 'a' && c <= 'f') return true; if (c >= 'A' && c <= 'F') return true; return false; } Вставка работает, если в ней нет запрещённых символов. Ответ 2
[DllImport("user32.dll", SetLastError = true)] private static extern int GetWindowThreadProcessId( [In] IntPtr hWnd, [Out, Optional] IntPtr lpdwProcessId ); [DllImport("user32.dll", SetLastError = true)] private static extern IntPtr GetForegroundWindow(); [DllImport("user32.dll", SetLastError = true)] private static extern ushort GetKeyboardLayout( [In] int idThread ); private int GetKeyboardLayout() { return GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), IntPtr.Zero)); } private void validationTextBox_KeyDown(object sender, KeyEventArgs e) { TextBox a = (TextBox)sender; if (e.Key >= Key.D0 && e.Key <= Key.Z) { if ((e.Key >= Key.A && e.Key <= Key.Z) && (GetKeyboardLayout() != 1033)) e.Handled = true; } else e.Handled = true; }
Комментариев нет:
Отправить комментарий