دسته بندی ها
17:44 1398/11/08

FormatString برای ورود تاریخ شمسی

مشخصات سوال کننده :
کاربر : Nori     امتیاز کاربر : 72     رتبه کاربر : 15
دسته بندی : WPF

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

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

برای فرمت کردن ورودی تاریخ شمسی در یک تکس باکس و نمایش آن به فرمت دلخواه می توانید از جاوااسکریپت استفاده کنید. در اینجا یک نمونۀ ساده از چگونگی انجام این کار آورده شده است:



با این کد، وقتی کاربر تاریخ را وارد می کند، به صورت خودکار فرمت آن به صورت 1398/02/09 نمایش داده می شود. به همین صورت می توانید کنترل های لازم را بر روی ورودی اعمال کنید تا ورودی های نامعتبر (مثل 139829) رد شوند.

به این پاسخ امتیاز بدهید    0
امتیاز: - رتبه: -
پاسخ دهنده : Sowgandi 19:25 1398/11/08

سلام دوست گرامی.

ابتدا در بدنه فرم خود کد زیر رو قرار بدید.

      private string FormatStringDate(int date)
        {
            string text = textBox.Text.Trim();
            if (text.Length != 8) { textBox.Clear(); return ""; }
            if (Convert.ToInt32(text.Substring(4, 2)) > 12 || Convert.ToInt32(text.Substring(4, 2)) < 1) { textBox.Clear(); return ""; }
            if (Convert.ToInt32(text.Substring(6, 2)) > 31 || Convert.ToInt32(text.Substring(6, 2)) < 1) { textBox.Clear(); return ""; }
            return text.Substring(0, 4) + "/" + text.Substring(4, 2) + "/" + text.Substring(6, 2);
        }

سپس در رویدادهای GotFocus و LostFocus تکست باکس خود کدهای زیر رو مانند نمونه قرار بدید.

        private void textBox_GotFocus(object sender, RoutedEventArgs e)
        {
            textBox.Text = textBox.Text.Replace("/", "");
        }

        private void textBox_LostFocus(object sender, RoutedEventArgs e)
        {
            textBox.Text = FormatStringDate(Convert.ToInt32(textBox.Text.Trim()));
        }

به این صورت تاریخ وارد شده همون طور که گفتید کنترل میشه. حتی ورودی های ماه و روز هم کنترل میشه. مثلا کاربر نمیتونه ماه بیشتر از 12 و روز بیشتر از 31 رو وارد کنه. در صورت وارد کردن فرمت نادرست تکست باکس خالی میشه.

برای گرفتن مقدار تاریخ از تکست باکس به صورت int که فرمودید از کد زیراستفاده کنید. (جهت ذخیره در دیتابیس)

int date = Convert.ToInt32(textBox.Text.Trim().Replace("/", ""));

همچنین برای پر کردن تکست باکس زمانی که از دیتابیس سلکت میزنید از کد زیر استفاده کنید. 

textBox.Text = FormatStringDate(SelectedDate);

SelectedDate در کد بالا همان تاریخی است که به صورت int از دیتابیس سلکت زدید.

کدهای بالا رو استفاده کنید و در صورتی که مشکل داشتید بگید تا بررسی کنیم.

موفق باشید.

به این پاسخ امتیاز بدهید    2
امتیاز: 876 رتبه: 3
2 نظر
Alireza : سلام ماههایی که ۳۰ روز و ۲۹ روز هست رو چجور میشه کنترل کرد؟

امتیاز کاربر : 115   رتبه کاربر : 13   تاریخ ثبت : 10:41 1400/01/29
Sowgandi : سلام. پاسخ بالا یه مورد خاص هست. شما در حالات عادی باید از DataPicker شمسی استفاده کنید. که خودش همه این ها رو مدیریت میکنه

امتیاز کاربر : 876   رتبه کاربر : 3   تاریخ ثبت : 11:12 1400/01/30
پاسخ دهنده : Nori 10:51 1398/11/09

Sowgandi

خیلی خیلی ممنون از لطفتون 

چشم تست کنم 

سپاس

به این پاسخ امتیاز بدهید    1
امتیاز: 72 رتبه: 15
برای ارسال پاسخ لطفا وارد حساب کاربری خود شوید.   ورود