PDA

View Full Version : آموزش: Mask Shamsi Date



ali_najari
جمعه 07 آبان 1389, 12:36 عصر
این هم ورژن اول Mask Shamsi Date برای کلیه دوستان
به هیچ کد نویسی هم نیاز نداره چون خودش همه چیز رو تشخیص میده و کاربر رو محدود میکنه به وارد کردن فقط عدد و خودش بصورت اتوماتیک Mask میکنه و همچنین اگر تاریخ درست نباشه خطا میده و قابلیت تشخیص سال کبیسه رو هم داره

این امکان رو هم داره که با کلید وسط موس (Wheel) میتونید تاریخ رو به عقب و جلو ببرید

و یکسری امکانات دیگه داره که در آینده یه پروژه میزارم و همه اونها رو تویش توضیح میدم


http://barnamenevis.org/forum/showpost.php?p=1138965&postcount=8

یا

http://visualbasic-net.blogsky.com/1389/08/07/post-13/

nazanin0
جمعه 07 آبان 1389, 16:54 عصر
سلام
ولی فقط تاریخ حال سیستم رو نمایش میده اگه بخوام هر تاریخی دیگه ای رو که می نویسم به شمسی تبدیل کنه باید چیکار کنم؟:خجالت:

ali_najari
جمعه 07 آبان 1389, 17:04 عصر
تبدیل تاریخ میلادی به شمسی



Public Function MiladiToShamsi(ByVal MDate As Date) As String


MiladiToShamsi = “”



Dim pc As New Globalization.PersianCalendar


Dim Sal As Integer = pc.GetYear(MDate)

Dim Mah As Integer = pc.GetMonth(MDate)

Dim Roz As Integer = pc.GetDayOfMonth(MDate)


MiladiToShamsi = Format(Sal, "0000") & "/" & Format(Mah, "00") & "/" & Format(Roz, "00")


Return MiladiToShamsi


End Function


طریقه استفاده


Msgbox(MiladoToShamsi(Now()))

ali_najari
جمعه 07 آبان 1389, 17:08 عصر
دوست عزیز توی همون کامپونت وجود داره که میتونید تاریخ میلادی بدید و به شمسی اون رو دریافت کنید یا اینکه تاریخ شمسی بدید و میلادی رو بگیرید

ولی کمی باید صبر کنید تا طریقه فعال کردن و استفاده رو بهتون بگم

ali_najari
جمعه 07 آبان 1389, 17:09 عصر
این هم کد تبدیل تاریخ شمسی به میلادی



Public Function ShamsiToMiladi(ByVal SDate As String) As String

Dim pc As New Globalization.PersianCalendar
ShamsiToMiladi = ""
If SDate.Length = 10 Then

Dim Tarikh
Tarikh = Split(SDate, "/")

ShamsiToMiladi = (pc.ToDateTime(Tarikh(0), Tarikh(1), Tarikh(2), 0, 0, 0, 0))

End If

Return ShamsiToMiladi

End Function


طریقه استفاده


Msgbox(ShamsiToMiladi ("1367/02/11"))

nazanin0
جمعه 07 آبان 1389, 17:48 عصر
ببخشید خیلی سوال میپرسم:خجالت:

این واسه وقتی که کاربر تاریخ میلادی وارد کنه و تاریخ شمسی رو دریافت کنه من می خوام از اول کاربر تاریخ شمسی وارد کنه چیکار کنم؟؟؟؟

ali_najari
جمعه 07 آبان 1389, 21:46 عصر
منظورتون رو اصلا متوجه نشدم

من هر 2 تا رو گذاشتم هم تبدیل تاریخ شمسی به میلادی و هم میلادی به شمسی

nazanin0
جمعه 07 آبان 1389, 23:10 عصر
ببینید من یه mask textboxدارم که می خوام توش تاریخ بنویسم تاریخ رو به صورت میلادی دریافت میکنه درسته؟ مثلاً همین تاریخی که شما نوشتید(11/02/1367)تویmasktextbox با 1300مشکل داره و می خواد که1900وارد کنید (11/02/1967)
حالا اگه کد تبیدیل میلادی به شمسی بخواد اجرا بشه مسلماً دیگه تاریخی رو که میخوام (11/02/1367 ) به من نمیده .(امیدوارم گیجتون نکرده باشم)
من می خوام کاری کنم که از اول بتونم تاریخ رو به صورت شمسی وارد کنم (11/02/1367)
انشاا.. که توضیحم کافی باشه و بتونید کمکم کنید چون واقعاً بهش نیاز دارم.
با تشکر

ali_najari
شنبه 08 آبان 1389, 10:54 صبح
دوست عزيز اگر دقت كنيد ميبينيد كه اون كامپونتي كه من ساختم همينه و نياز به تبديل نداره شما خيلي راحت ميتونيد تاريخ رو شمسي وارد كنيد اگر هم ميخوايد بصورت اتوماتيك 13 رو اولش قرار بده ديگه بحثش جداست و بايد كد نويسي كنيد يكم

nazanin0
شنبه 08 آبان 1389, 11:42 صبح
دوست عزیز از کامپونت شما استفاده کردم نشد. اصلاً بحث برسر گذاشتن 13 نیست خوب فرض کنید من 13 رو به طور ثابت گذاشتم ولی وقتی پیغام میده که تاریخ باید بین 1/1/1753 تا31/12/9999
باشه این یعنی تاریخ رو میلادی میبینه نه شمسی .
نمی دونم مشکل از کجاست !ممکنه به خاطر بانک باشه؟ چون این اطلاعات باید وارد بانک بشه .

لطفاً اگه راهی به ذهنتون می رسه بفرمایید بلکه ای مشکل که چند روزه وقتم رو گرفته حل بشه.

با تشکر از زحمات شما

dataking
شنبه 08 آبان 1389, 11:54 صبح
با سلام
آقای نجاری خسته نباشید دستون درد نکنه بسیار مفید و کاربردی بود
ولی ای کاش دوستانی مثل نازیین بزرگوار با سولات XXx خب ... من یه پیشنهاد به نازنین دارم
شما سعی کن یاد بگیری برای همیشه نه فقط این مشکلت را حل کنی سعی کن خیلی بیشر فکر کنی این مشکل اصلا کامپوننت نمی خواست که آقای نجاری اینقدر زحمتشو کشیدند .
لطفا برای جواب من پست نزنید و فقط اگر اشتباه کردم ببخشید .

ali_najari
شنبه 08 آبان 1389, 14:06 عصر
نازنين خانم زودتر ميگفتيد كه ميخوايد وارد بانك كنيد اين اطلاعات رو
بله مشكل از بانك هست
شما 2 راه حل داريد:

1- تاريخ رو بصورت ميلادي وارد بانك كنيد و بعد هنگام فراخواني آن را شمسي كنيد
2- فيلد داخل بانك اطلاعاتي رو از نوع Varchar تعريف كنيد و تاريخ شمسي رو وارد كنيد

nazanin0
شنبه 08 آبان 1389, 15:41 عصر
نازنين خانم زودتر ميگفتيد كه ميخوايد وارد بانك كنيد اين اطلاعات رو
بله مشكل از بانك هست
شما 2 راه حل داريد:

1- تاريخ رو بصورت ميلادي وارد بانك كنيد و بعد هنگام فراخواني آن را شمسي كنيد
2- فيلد داخل بانك اطلاعاتي رو از نوع Varchar تعريف كنيد و تاريخ شمسي رو وارد كنيد

خوب خداروشکر که مشکل پیدا شد حالا میشه حلش کرد ولی فکر کنم دیگه عصبانی شدید نه؟:خجالت:

اینکه فرمودید تاریخ رو میلادی واردکنم :
ببینید به نظرتون سخت نیست کاربر بیچاره بگرده تاریخ موردنظرش ( برای وارد کردن در masktextbox)رو اول به میلادی تبدیل کنه تا بعد به صورت شمسی از بانک اونرو ببینه ؟؟؟ :متفکر:
از اینکه وقتتون رو در اختیار من قرار میدید ممنون

nazanin0
یک شنبه 09 آبان 1389, 08:12 صبح
کسه دیگه ای نیست کمکم کنه ؟(لطفاً)

با تشکر

DoDoklak
یک شنبه 09 آبان 1389, 08:48 صبح
جهت استفاده از تاریخ میتونید همون تاریخ شمسی رو ذخیره کنید.

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

http://www.lookpictures.net/photos/anonymous_photos/3818-farsidall.png

جهت استفاده از این کامپونینت به لینک زیر پست 9 مراجعه کنید


http://barnamenevis.org/forum/showthread.php?t=253683

ali_najari
یک شنبه 09 آبان 1389, 08:49 صبح
مشكلتون ديگه چي هست؟

ببينيد ميتونيد با توابعي كه خدمتتون دادم و همچنيد از توابع خود همون كامپونت كاربر تاريخ رو شمسي وارد كنه ولي شما بدون نياز به هيچ كد نويسي تاريخ را ميلادي دريافت كنيد از كامپونت

و براي شمسي كردن هم كه تابعش رو دادم بهتون ولي بهترين راه به نظر من تغيير نوع فيلد بانكتون هست

ali_najari
یک شنبه 09 آبان 1389, 15:50 عصر
سلام دوستان عزيز
ورژن 1.1 از MaskShamsiDate رو واستون آماده كردم با يكسري امكانات جديد و بدرد بخور اميدوارم كه به كارتون بياد

هم Dll رو ميزارم و هم Sample رو براي استفاده از قسمتهايي كه افزوده شده

دوستان فقط بگم كه :
با Alt+home سال رو انتخاب ميكنه
با Alt+End روز را انتخاب ميكنه
با UP و Down تاريخ تغيير ميكنه و بسته به اينكه سال يا ماه يا روز انتخاب شده تغيير ميكنه
با كليد Wheel موس تاريخ كم و زياد ميشه
با كليد Right و Left عدد بعدي يا قبلي انتخاب ميشه
با Alt+Right و Alt+Left مقدار سال يا ماه يا روز انتخاب ميشه


منتظر ورژن بعدي اين كامپونت باشيد با امكانات جديدتر
فقط دوستان اگر نظري دارند بدهند براي بهتر شدن و كاملتر شدن اين كامپونت

با تشكر از دوستان

nazanin0
یک شنبه 09 آبان 1389, 16:19 عصر
مشكلتون ديگه چي هست؟

ببينيد ميتونيد با توابعي كه خدمتتون دادم و همچنيد از توابع خود همون كامپونت كاربر تاريخ رو شمسي وارد كنه ولي شما بدون نياز به هيچ كد نويسي تاريخ را ميلادي دريافت كنيد از كامپونت

و براي شمسي كردن هم كه تابعش رو دادم بهتون ولي بهترين راه به نظر من تغيير نوع فيلد بانكتون هست

مشکل من هم همینه شمسی رو نمی خونه وقتی تاریخ رو به صورت (09/08/1389)
و گزینه درج رو در فرم می زنم با دستو ر error providای که گذاشتم پیغام زیر رو به من می ده.از dll جناب ِDODOKLAK عنوان کرده بودند هم استفاده کردم ولی فرجی حاصل نشد.

با تشکر

ali_najari
یک شنبه 09 آبان 1389, 17:03 عصر
نازنين خانم من گفتم خدمتتون شما بايد فيلد بانكتون رو از حالت DateTime تغيير بديد و Varchar ش كنيد يا تاريخ رو ميلادي وارد كنيد

nazanin0
دوشنبه 10 آبان 1389, 08:41 صبح
نازنين خانم من گفتم خدمتتون شما بايد فيلد بانكتون رو از حالت DateTime تغيير بديد و Varchar ش كنيد يا تاريخ رو ميلادي وارد كنيد

همون اول که فرمودید نوع فیلد رو تغییر بدم این کارو انجام دادم ولی این مسئله حل نشد در مورد ورود تاریخ میلادی هم که کاربر اذیت میشه تازه از اون مهمتر استاد قبول نمی کنه!
ممنون از این که برای حل این مشکل راهنماییم کردید و وقت گذاشتی اشکالی نداره خودم یجوری حلش می کنم (دیر و زود داره ولی سوخت و سوز:ناراحت: .... چه عرض کنم)

موفق و مؤید باشید

ali_najari
دوشنبه 10 آبان 1389, 08:58 صبح
دوست عزيز من الان خودم تمام فيلدهاي تاريخم از نوع Varchar هست و ايراد نميگيره
احتمالا يجايي از كار اشكال داره حتما كدها و بانكتون رو دوباره بازبيني كنيد

اگر هم ميتونيد كه بانكتون و كدهاتون رو بزاريد تا ببينيم و شايد بتونيم كمكتون كنيم

nazanin0
سه شنبه 11 آبان 1389, 10:50 صبح
سلام

از گروه sql server سوال کردم گفتن که sql تاریخ شمسی رو نمی پذیره من هم با توجه به توضیحات شما (مبنی بر varchar بودن فیلد تاریخ)و نظر دوستان گروه sql(مبنی برتغییر نوع فیلد به (10)char ) نوع فیلد رو تغییر دادم ولی باز هنگام ثبت در بانک همون خطا رو می داد .

با یکی از دوستانم که مشورت کردم می گفت که اونم به همین مشکل بر می خورده ولی با کمک یکی از سال بالایی ها حلش کرده حالا قرار برام یه sample بفرسته اگه مشکلم با اون حل نشد مزاحم شما می شم .

موفق باشید

farbod61
دوشنبه 16 اردیبهشت 1392, 19:45 عصر
سلام علی جان
لطف میکنی بگی چه جوری میشه تفاوت تاریخها رو به روز تایین کرد و تو یک مسیج باکس نشون داد؟
البته در مورد برنامه شما متوجه شدم
ولی من میخوام این دو تا تاریخ رو از روی دیتا بیس بخونه که فکر کنم تو کامپوننت شما امکانش نیست
ممنون میشم آک.زش کم کردن دو تاریخ از هم رو به یه نمونه پروژه بزارید
ممنونم

ali_najari
سه شنبه 17 اردیبهشت 1392, 06:45 صبح
سلام علی جان
لطف میکنی بگی چه جوری میشه تفاوت تاریخها رو به روز تایین کرد و تو یک مسیج باکس نشون داد؟
البته در مورد برنامه شما متوجه شدم
ولی من میخوام این دو تا تاریخ رو از روی دیتا بیس بخونه که فکر کنم تو کامپوننت شما امکانش نیست
ممنون میشم آک.زش کم کردن دو تاریخ از هم رو به یه نمونه پروژه بزارید
ممنونم

سلام
این هم نمونه برنامه ای که میخواستید دوست عزیز

mohsen22
سه شنبه 17 اردیبهشت 1392, 18:17 عصر
سلام
این هم نمونه برنامه ای که میخواستید دوست عزیز

مرسی دوست من اگه بخواهیم اختلاف ساعت و دقیقه هم بهش اضافه بشه چیکار کنیم ؟

ali_najari
چهارشنبه 18 اردیبهشت 1392, 21:10 عصر
مرسی دوست من اگه بخواهیم اختلاف ساعت و دقیقه هم بهش اضافه بشه چیکار کنیم ؟
باید اونجایی که دارید تاریخ های شمسی رو به میلادی تبدیل میکنید بهش ساعت هم بدید
و مقدار برگشتی رو به ساعت و دقیق بگیرید که اون دیگه باید بصورت ریاضی بعد از مقدار گیری تبدیل کنید

ali_najari
چهارشنبه 18 اردیبهشت 1392, 21:49 عصر
دوست عزیز این هم نمونه برنامه ای که میخواستید