دسته بندی ها
14:24 1400/10/05

نحوه برگشت فوکوس روی تکست باکس در صورت ورود غیر مجاز

مشخصات سوال کننده :
کاربر : mojtabahakimian     امتیاز کاربر : 155     رتبه کاربر : 10
دسته بندی : سی شارپ WPF

به این سوال امتیاز بدهید    0
تعداد بازدید این سوال : 3538
هوش مصنوعی

پاسخ هوش مصنوعی

برای حل این مشکل و جلوگیری از بروز حلقه بی پایان، می توانید از یک پرچم (flag) استفاده کنید که نشان دهد آیا کاربر هنوز در حال وارد کردن مقدار مناسب است یا خیر. همچنین می توانید از رویداد `PreviewLostKeyboardFocus` بجای `LostFocus` استفاده کنید تا بررسی تاریخ قبل از تغییر فوکوس انجام شود. به این صورت، هنگامی که کاربر بر روی دیگر کنترل ها کلیک می کند، بررسی صحت تاریخ قبل از به دست آوردن فوکوس روی کنترل جدید انجام می شود.

در زیر کد اصلاح شده آورده شده است:


private bool isValidating = false;

private void DATE_N_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
    if (!isValidating)
    {
        isValidating = true; // فعال کردن پرچم

        if (!IsValidedDate(DATE_N.Text))
        {
            MessageBox.Show("مقدار تاریخ صحیح نیست", "", MessageBoxButton.OK, MessageBoxImage.Error);
            DATE_N.Focus(); // برگرداندن فوکوس به تکست باکس
            e.Handled = true; // جلوگیری از تغییر فوکوس
        }

        isValidating = false; // غیر فعال کردن پرچم
    }
}

با این تغییر، اگر کاربر مقدار نادرستی وارد کند، با پیغام خطا مواجه شده و فوکوس به تکست باکس باز می گردد، بدون ایجاد حلقه بی پایان.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : mojtabahakimian 19:15 1400/10/06

دوستان این راه حل دوتا مشکل هست :  یکی مشکل برگشت فوکوس روی کنترل در ورود مقدار غیر مجاز , مشکل فوکوس نکردن روی کنترل

   private void text1_LostFocus(object sender, RoutedEventArgs e)
        {
            if (text1.Text != "1")
            {
                MessageBox.Show("Please Enter Valid Number !");
                var restoreFocus = (System.Threading.ThreadStart)delegate { text1.Focus(); text1.SelectAll(); };
                Dispatcher.BeginInvoke(restoreFocus);
            }
        }

من با این مشکلم حل شد.

به این پاسخ امتیاز بدهید    2
امتیاز: 155 رتبه: 10
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود