نقل قول: ساخت یک TextBox برای تاریخ ایرانی با الزام به ثبت تاریخ درست Persian DateBox
فکر کنم در تابع FDateValid پست 158 برای اینکه بعد از صدور پیغام های تابع فوق بر روی تکست باکس تاریخ فوکوس شود نیاز بااشه بعد از دستور DoCmd.CancelEvent عبارت MyDate.SetFocus
اضافه شود.
نقل قول: ساخت یک TextBox برای تاریخ ایرانی با الزام به ثبت تاریخ درست Persian DateBox
نقل قول:
نوشته شده توسط
eb_1345
اگر ان شاءااله تا اینجا اشکالات کدهای نمونه ضمیمه شده 158پست توسط جناب آقای مازولاق عزیز رفع شود منتظر اعلام سایر شرایط و ویژگی های این کنترل جذاب خواهیم بود.
سلام
من الان فایل پیوست پست 158 رو گرفتم،
باید اول api declaration ها رو برای 64bit office درست کنم تا بتونم اجراش کنم.
نقل قول: ساخت یک TextBox برای تاریخ ایرانی با الزام به ثبت تاریخ درست Persian DateBox
نقل قول:
نوشته شده توسط
eb_1345
اگر ان شاءااله تا اینجا اشکالات کدهای نمونه ضمیمه شده 158پست توسط جناب آقای مازولاق عزیز رفع شود منتظر اعلام سایر شرایط و ویژگی های این کنترل جذاب خواهیم بود.
سلام دوباره
خب باید بگم دست مریزاد و خسته نباشین
اول از همه این که در این نمونه shared logic رعایت شده که بسیار مهم هست (تاریخ ایرانی تقریبا در هر فرمی دست کم یکی هست).
بعد اینکه از رخداد Keypress کنترل برای فیلتر کردن کلیدها استفاده شده که این هم درسته.
اینها مهم هاش بود - مابقیش رو باید اونایی که به بحث علاقه دارن خودشون پیگیر باشن.
البته مثل همه نمونه های اولیه چیزهای ریزی هم دیده میشه:
مثلا اگر در رکورد جدید، کاربر بخواد تاریخ رو خالی بذاره و فرم رو ببنده (یک موقعیت کاملا متداول - بخصوص در این فرم که بعد از خروج از کنترل اتوماتیک میره رکورد بعدی)
مجبوره از task manager کلا اکسس رو رو ببنده!
یا اگر فرضا مقدار تاریخ از پیش 1331/04/31 ثبت شده باشه، کاربر میتونه 4 رو مثلا 8 بگذاره و این مقدار (1331/08/31) در جدول میشینه بدون هیچ پیامی.
1 ضمیمه
نقل قول: ساخت یک TextBox برای تاریخ ایرانی با الزام به ثبت تاریخ درست Persian DateBox
نقل قول:
نوشته شده توسط
mazoolagh
البته مثل همه نمونه های اولیه چیزهای ریزی هم دیده میشه:
مثلا اگر در رکورد جدید، کاربر بخواد تاریخ رو خالی بذاره و فرم رو ببنده (یک موقعیت کاملا متداول - بخصوص در این فرم که بعد از خروج از کنترل اتوماتیک میره رکورد بعدی)
مجبوره از task manager کلا اکسس رو رو ببنده!
یا اگر فرضا مقدار تاریخ از پیش 1331/04/31 ثبت شده باشه، کاربر میتونه 4 رو مثلا 8 بگذاره و این مقدار (1331/08/31) در جدول میشینه بدون هیچ پیامی.
با سلام و درود فراوان
ببخشید استاد مازولاق عزیز ! آیا نمونه ضمیمه 158 رو تست کردید
چون در ارتباط با این دو موردی که اشاره فرموده ای فکر کنم در نمونه فوق مشکلی وجود نداشته باشه ؛ شاید هم بنده دقیقاً متوجه منظور شما نشده ام
در ارتباط با مورد اول اگر کاربر از طریق فرم اقدام به ایجاد رکورد جدید نماید ولی بخواهد بدون وارد کردن تاریخ از فرم خارج شود با پیغام «ورود يک مقدار درست براي تاريخ الزامي الزامي ميباشد» مواجه میشود , چون در خصوصیت tag تکست باکس تاریخ علامت {} درج شده و مطابق شرط هفتم پست 145 باید لزوماً تاریخ وارد شود در غیر اینصورت امکان خروج از فرم وجود ندارد.
نقل قول:
نوشته شده توسط
mazoolagh
یا اگر فرضا مقدار تاریخ از پیش 1331/04/31 ثبت شده باشه، کاربر میتونه 4 رو مثلا 8 بگذاره و این مقدار (1331/08/31) در جدول میشینه بدون هیچ پیامی.
نقل قول:
نوشته شده توسط
eb_1345
3- کنترل تعداد روزها در شش ماهه دوم سال( برای زمانی که مثلا با ماه شش ماهه اول روز 31 برای روز وارد شده باشد بعد بیائیم عدد ماه شش ماه دوم وارد کنیم)
الیته برای این مورد میتوان بدون صدور پیغام هم در زمان تغییر عدد ماه چک شود که اگر قبلا برای روز عدد 31 وارد شده دیگر نتوان عدد ماههای نیمه دوم رو وارد کرد و یا اینکه اگر عدد شش ماهه دوم وارد شد در همان موقع چک شود که اگر عدد روز 31 میباشد عدد روز پاک شود تا در ادامه با توجه به عدد ماه پر شود
CODE]
Public Function FDateValid(myDate As Control) As Boolean
If (Val(m) > 6 And Val(d) > 30) Then
FDateValid = False
MsgBoxFa ". تعداد روزهاي هر ماه در شش ماهه دوم سال حداکثر 30 روز است !لطفا روز را اصلاح كنيد", vbCritical, "خطا"
DoCmd.CancelEvent
Exit Function
End If
End Function
[/CODE]
در ارتباط با مورد دوم هم همانطور که در توضیحات پست 157 اشاره کرده ام اگر چنین تغییری از طرف کاربر صورت بگیرد در هنگام خروج از فرم با پیغام« تعداد روزهاي هر ماه در شش ماهه دوم سال حداکثر 30 روز است !لطفا روز را اصلاح كنيد» مواجه میشود .
علی ایحال در نمونه اصلاح شده ضمیمه , تغییرات جزئی ای بعمل آورده ام