تأمين بانخفاض أحرف صالحة في مربع نص
-
05-07-2019 - |
سؤال
وأنا بحاجة إلى أن تكون قادرة على تأمين الأحرف الصالحة في مربع النص، وأنا في الوقت الحاضر باستخدام التعابير المنطقية التي أستطيع أن تحقق كل حرف ضد مثل
<اقتباس فقرة>[A-زا زي]
اقتباس فقرة>وسيكون تأمين إلى أحرف ألفا فقط.
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (e.KeyChar == (char)Keys.Back)
{
base.OnKeyPress(e);
return;
}
if (String.IsNullOrEmpty(this._ValidCharExpression))
{
base.OnKeyPress(e);
}
else
{
bool isValidChar = Regex.Match(e.KeyChar.ToString(),this._ValidCharExpression).Success;
if (isValidChar)
{
base.OnKeyPress(e);
}
else
{
e.Handled = true;
}
}
}
وكنت قد وضعت رمز التعابير المنطقية في قانون OnKeyPress، لكنني وات للسماح لجميع مفاتيح خاصة، مثل الضغط على مفتاح Ctrl V، على Ctrl-C وBackspace ليسمح.
وكما ترون لدي مفتاح مسافة للخلف يجري التعامل معها. ومع ذلك، على Ctrl-V، على سبيل المثال لا يمكن رؤية مفتاح V لأنه يعمل مرة واحدة للحصول على مفتاح السيطرة ولكن لا أرى أي معدلات المفاتيح.
ما هي أفضل طريقة للتعامل مع هذا الوضع؟
المحلول
ويمكنك استخدام واحدة من OnKeyPress / OnKeyUp / OkKeyDown الأحداث ومن ثم استخدام أسلوب Char.IsLetter للتأكد من أن مفتاح دخل هو بريد إلكتروني.
نصائح أخرى
MaskedTextBox أ > قد يكون لك الحق.
ويمكنك أيضا أن ننظر في FilterTextBox في أكثر من CodeProjct. يمكنك استخدامها (أو النهج المبين) ليفعل ما كنت تنوي. والفكرة الأساسية هي لإلغاء التغيير قبل أنها أصبحت واضحة (عبر حدث OnTextChanging).
وماذا لو كنت وضعت على التحقق من الصحة في OnTextChanged بدلا من OnKeyPress، لكن في كل مرة كان يمر التحقق من الصحة الذي حفظ القيمة إلى متغير؟ ثم يمكنك العودة إذا يلصق المستخدم أو أنواع سلسلة غير صحيحة، وكذلك إعطاء بعض التلميح UI الآخرين أن شيئا ما كان غير صالح (مجموعة على سبيل المثال نص تسمية ل).
لماذا لا تضع الاختيار أحرف صالحة في الحدث OnTextChanged
ومن ثم التعامل مع السيطرة + C، والسيطرة + V في على مفتاح لأسفل
وأيضا يمكنك استخدام e.ModifierKeys == Keys.Control لاختبار مفاتيح التحكم
http://msdn.microsoft.com /en-us/library/system.windows.forms.keypresseventargs.aspx
والحل الذي جئت مع هو للتحقق من المفاتيح في الحدث عند_ضغط_مفتاح ثم وضع العلم إذا كان ينبغي التعامل مع بضغطة، الذي ثم تحقق في حال OnKeyPress.
protected override void OnKeyDown(KeyEventArgs e)
{
Keys keyCode = (Keys)e.KeyValue;
base.OnKeyDown(e);
if ((e.Modifiers == Keys.Control) ||
(e.Modifiers == Keys.Control) ||
(keyCode == Keys.Back) ||
(keyCode == Keys.Delete))
{
this._handleKey = true;
}
else
{
// check if the key is valid and set the flag
this._handleKey = Regex.Match(key.ToString(), this._ValidCharExpression).Success;
}
}
protected override void OnKeyPress(KeyPressEventArgs e)
{
if (this._handleKey)
{
base.OnKeyPress(e);
this._handleKey = false;
}
else
{
e.Handled = true;
}
}