التحقق القوي في مربعات نص WPF

عند العمل مع تطبيقات مرتبطة بالبيانات في Windows Presentation Foundation (WPF)، يعد التحقق أمرًا بالغ الأهمية لضمان أن إدخالات المستخدمين صحيحة وآمنة. تنطوي إحدى السيناريوهات الشائعة على TextBox مرتبط بخصائص عشرية قابلة للإلغاء، مثل الارتفاع. ومع ذلك، تنشأ مشكلة عندما يمكن أن يفقد TextBox التركيز حتى عند إدخال قيمة غير صحيحة. في هذا المنشور، سوف نستكشف استراتيجيات فعالة لتنفيذ تحقق قوي في WPF، مع التركيز بشكل خاص على طريقتين رئيسيتين لمعالجة حالة الإدخال لـ TextBox.

المشكلة: ضمان إدخالات المستخدم الصحيحة

اعتبر TextBox في تطبيقك المرتبط بخصائص عشرية، مما يسمح للمستخدمين بإدخال قيم الارتفاع. عندما يقوم المستخدم بإدخال قيمة لا يمكن تحويلها إلى قيمة عشرية، يبرز TextBox خطأ. ومع ذلك، هناك خطر أن يقوم المستخدم بالانتقال بعيدًا عن TextBox، مما يترك التطبيق في حالة غير صحيحة. لمعالجة ذلك، سننظر في حلين محتملين:

  1. منع TextBox من فقدان التركيز حتى يكون لديه قيمة صحيحة.
  2. إرجاع محتوى TextBox إلى آخر قيمة صحيحة عند فقدان التركيز مع إدخال غير صحيح.

الحل 1: منع فقدان التركيز

إحدى الطرق الفعالة للحفاظ على التركيز على TextBox حتى يتم تقديم إدخال صحيح هي معالجة الحدث PreviewLostKeyboardFocus. تتضمن هذه الطريقة حظر تغيير التركيز برمجيًا في أي وقت يتم فيه اكتشاف حالة غير صحيحة. إليك كيفية تنفيذ هذا الحل:

تنفيذ XAML

أولاً، أضف معالج حدث لـ PreviewLostKeyboardFocus في تعريف TextBox الخاص بك:

<TextBox PreviewLostKeyboardFocus="TextBox_PreviewLostKeyboardFocus" 
         Text="{Binding Height, UpdateSourceTrigger=PropertyChanged, 
                         ValidatesOnExceptions=True, 
                         Converter={StaticResource NullConverter}}" />

تنفيذ كود C#

بعد ذلك، قم بتنفيذ معالج الحدث في الكود الخلفي الخاص بك لمنع فقدان التركيز:

private void TextBox_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) {
    TextBox box = sender as TextBox;
    var binding = box.GetBindingExpression(TextBox.TextProperty);
    
    // التحقق من وجود أخطاء تحقق
    if (binding.HasError) {
        // منع تغيير التركيز
        e.Handled = true;
    }
}

من خلال استخدام هذه الطريقة، لن يسمح TextBox بفقدان التركيز حتى يقوم المستخدم بإدخال قيمة عشرية صحيحة. هذا يضمن نزاهة البيانات في مرحلة الإدخال.

الحل 2: إرجاع إلى آخر قيمة صحيحة

حل آخر هو إرجاع محتوى TextBox إلى آخر إدخال صحيح عند فقدان التركيز. يمكن أن يكون هذا مفيدًا بشكل خاص في التطبيقات صديقة المستخدم حيث يُفضل الاحتفاظ بالحالة الصحيحة الأخيرة.

الطريقة الموجودة

قد تكون قد قمت بالفعل بتنفيذ شكل أساسي من هذا في معالج حدث LostKeyboardFocus. للتأكيد، إليك كيفية بنائها:

private void TextBox_LostKeyboardFocus(object sender, RoutedEventArgs e) {
    TextBox box = sender as TextBox;
    var binding = box.GetBindingExpression(TextBox.TextProperty);
    
    if (binding.HasError) {
        binding.UpdateTarget(); // يُرجع إلى آخر قيمة صحيحة
    }
}

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

الخاتمة

يمكن أن يؤدي تنفيذ التحقق القوي في عناصر تحكم TextBox في WPF إلى تعزيز تجربة المستخدم بشكل كبير من خلال التأكد من معالجة البيانات الصحيحة فقط. سواء بمنع فقدان التركيز أو بالعودة إلى آخر قيمة صحيحة، يمكنك الحفاظ على نزاهة البيانات التي يجمعها تطبيقك. اختر الطريقة التي تناسب احتياجات تطبيقك لتوفير تجربة فعالة وصديقة للمستخدم.

من خلال استخدام هذه التقنيات، يمكنك تعزيز مرونة نماذج إدخال بياناتك وتوجيه المستخدمين نحو تفاعلات ناجحة مع تطبيقك.