سؤال

وأنا بحاجة إلى أن تكون قادرة على تأمين الأحرف الصالحة في مربع النص، وأنا في الوقت الحاضر باستخدام التعابير المنطقية التي أستطيع أن تحقق كل حرف ضد مثل

<اقتباس فقرة>   

[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;
    }
  }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top