การตรวจสอบข้อมูลที่เข้มงวดใน WPF TextBoxes
เมื่อทำงานกับแอปพลิเคชันที่มีการเชื่อมโยงข้อมูลใน Windows Presentation Foundation (WPF) การตรวจสอบข้อมูลเป็นสิ่งสำคัญเพื่อให้แน่ใจว่าการป้อนข้อมูลของผู้ใช้ถูกต้องและปลอดภัย หนึ่งในสถานการณ์ทั่วไปเกี่ยวข้องกับ TextBox
ที่เชื่อมโยงกับคุณสมบัติทศนิยมที่สามารถเป็นค่าว่างได้ เช่น ความสูง อย่างไรก็ตาม ปัญหาจะเกิดขึ้นเมื่อ TextBox
สามารถสูญเสียโฟกัสได้แม้ว่าจะมีการป้อนค่าที่ไม่ถูกต้อง ในบทความนี้เราจะสำรวจกลยุทธ์ที่มีประสิทธิภาพในการนำการตรวจสอบที่เข้มงวดมาใช้ใน WPF โดยเน้นเฉพาะสองวิธีหลักในการจัดการสถานะการป้อนข้อมูลของ TextBox
ปัญหา: การรับประกันการป้อนข้อมูลของผู้ใช้ที่ถูกต้อง
ลองพิจารณา TextBox
ในแอปพลิเคชันของคุณที่เชื่อมโยงกับคุณสมบัติของทศนิยม ซึ่งอนุญาตให้ผู้ใช้ป้อนค่าความสูง เมื่อผู้ใช้ป้อนค่าที่ไม่สามารถแปลงเป็นทศนิยมได้ TextBox
จะเน้นข้อผิดพลาด อย่างไรก็ตามมีความเสี่ยงที่ผู้ใช้อาจเลื่อนโฟกัสออกจาก TextBox
ทำให้แอปพลิเคชันอยู่ในสถานะที่ไม่ถูกต้อง เพื่อแก้ไขปัญหานี้เราจะดูสองวิธีแก้ไขที่เป็นไปได้:
- ป้องกันไม่ให้
TextBox
สูญเสียโฟกัสจนกว่าจะมีค่าที่ถูกต้อง - คืนค่าเนื้อหา
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 สามารถยกระดับประสบการณ์ผู้ใช้ได้อย่างมีนัยสำคัญ โดยการรับประกันว่ามีเพียงข้อมูลที่ถูกต้องเท่านั้นที่ถูกประมวลผล โดยการป้องกันการสูญเสียโฟกัสหรือคืนค่ากลับไปยังค่าที่ถูกต้องล่าสุด คุณสามารถรักษาความสมบูรณ์ของข้อมูลที่แอปพลิเคชันของคุณรวบรวม นอกจากนี้เลือกวิธีที่เหมาะสมที่สุดกับความต้องการของแอปพลิเคชันของคุณเพื่อให้สามารถให้บริการที่มีประสิทธิภาพและเป็นมิตรกับผู้ใช้ได้
โดยการใช้เทคนิคเหล่านี้ คุณสามารถเพิ่มความแกร่งให้กับแบบฟอร์มการป้อนข้อมูลของคุณและนำผู้ใช้ของคุณไปสู่การมีปฏิสัมพันธ์ที่ประสบความสำเร็จมากขึ้นกับแอปพลิเคชันของคุณ