PDA

View Full Version : سوال: سنجش اعتبار تاریخ با PersianCalendar ویژال استودیو



y.saied
پنج شنبه 08 فروردین 1392, 16:56 عصر
Module MyModule

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

Public Function NameDayOfWeek(ByVal GetDayOfWeeks As Byte) As String
Select Case GetDayOfWeeks
Case 0
Return "یکشنبه"
Case 1
Return "دوشنبه"
Case 2
Return "سه شنبه"
Case 3
Return "چهارشنبه"
Case 4
Return "پنجشنبه"
Case 5
Return "جمعه"
Case 6
Return "شنبه"
Case Else
Return ""
End Select
End Function

End Module



سلام دوستان، بنده با استفاده از کدهای بالا تاریخ شمسی رو در تکست باکس نشون میدم، حالا برای سنجش درست یا اشتباه بودن تاریخ ورودی از طرف کاربر میتونم از همین کدها استفاده کنم؟؟؟
با چه روشی؟؟؟

Abbas Amiri
جمعه 09 فروردین 1392, 19:16 عصر
سلام
هرجا که تابع رو صدا میزنید قبل از آن با عبارت On Error GoTo ErrHandlerLabel خطای نامعتبربودن تاریخ را بدام بیندازید که احتمالا خطای شماره 13 است

y.saied
شنبه 10 فروردین 1392, 00:16 صبح
سیلام
مرسی دوست عزیز
اگه ممکنه یه مثال بذارین.. بنده تازه کارم :اشتباه:

Abbas Amiri
شنبه 10 فروردین 1392, 00:25 صبح
سیلام
مرسی دوست عزیز
اگه ممکنه یه مثال بذارین.. بنده تازه کارم :اشتباه:
این هم مثال:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
On Error GoTo ErrH
T2.Text = MiladiToShamsi(T1.Text)
Exit Sub
ErrH:
If Err.Number = 13 Then
MsgBox("تاریخ میلادی وارده نامعتبراست")
Else
MsgBox("خطای شماره " & Err.Number & vbCrLf & Err.Description)
End If

End Sub

y.saied
شنبه 10 فروردین 1392, 00:47 صبح
دوست عزیز، کدهایی رو که نوشتین .... درست کار نمیکنه ... بی زحمت خودتون یه بار امتحان کنین


این هم مثال:


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
On Error GoTo ErrH
T2.Text = MiladiToShamsi(T1.Text)
Exit Sub
ErrH:
If Err.Number = 13 Then
MsgBox("تاریخ میلادی وارده نامعتبراست")
Else
MsgBox("خطای شماره " & Err.Number & vbCrLf & Err.Description)
End If

End Sub

Abbas Amiri
شنبه 10 فروردین 1392, 01:09 صبح
دوست عزیز، کدهایی رو که نوشتین .... درست کار نمیکنه ... بی زحمت خودتون یه بار امتحان کنینامتحان شد مشکلی نداشت
102096 102098

http://barnamenevis.org/images/misc/pencil.png

y.saied
شنبه 10 فروردین 1392, 01:13 صبح
دوست عزیز
بنده نمیخوام تبدیل کنمممم ... تدبیل رو میتونم انجام بدمممم
میخوام اشتباه وارد شده تاریخ شمسی توسط کاربر رو سیستم بهش گوشزد بکنه!!!!!!
مثلاً وقتی کاربر تاریخ رو بصورت 1391/13/05 وارد میکنه، اشتباه بودن تاریخ وارد شده رو به کاربر اعلام بکنه

Abbas Amiri
شنبه 10 فروردین 1392, 01:19 صبح
دوست عزیز
بنده نمیخوام تبدیل کنمممم ... تدبیل رو میتونم انجام بدمممم
میخوام اشتباه وارد شده تاریخ شمسی توسط کاربر رو سیستم بهش گوشزد بکنه!!!!!!
مثلاً وقتی کاربر تاریخ رو بصورت 1391/13/05 وارد میکنه، اشتباه بودن تاریخ وارد شده رو به کاربر اعلام بکنه
از تابع IsDate استفاده کنید.


If Not IsDate(T1.Text) Then
'Type your code
End If


ضمنا این ورودی این تابع تاریخ میلادی است و برای منظور شما جستجو کنید "اعتبارسنجی تاریخ شمسی"

y.saied
شنبه 10 فروردین 1392, 01:20 صبح
تاریخ شمسی رو ساپورت میکنه؟؟؟
یا باید اول به میلادی تبدیل کنم ... بعد!!!!

Abbas Amiri
شنبه 10 فروردین 1392, 01:25 صبح
تابع فوق اگر تاریخ صحیح میلادی بگیرد یک تاریخ صحیح شمسی می دهد واگر کابر شما می خواهد تاریخ شمسی وارد کنید باید ازتوابع اعتبارسنجی شمسی استفاده کنید.

y.saied
شنبه 10 فروردین 1392, 01:34 صبح
آقا پس اول تاریخ شمسی رو به میلادی تبدیل میکنم بعد با تابع IsDate درستی تاریخ میلادی رو بررسی میکنم.
اوکی؟!

Abbas Amiri
شنبه 10 فروردین 1392, 09:50 صبح
آقا پس اول تاریخ شمسی رو به میلادی تبدیل میکنم بعد با تابع IsDate درستی تاریخ میلادی رو بررسی میکنم.
اوکی؟!
سلام
احتیاجی به ایجاد تاپیک جدید برای تبدیل شمسی به میلادی نبود . عرض کردم که فقط بایستی درستی تاریخ شمسی بررسی شود . از اگر بخواهید خودتان بدون نیاز به PersianCalendar بنویسید حدود 15 خط کدنویسی احتیاج دارد ولی با استفاده از تابع زیر براحتی امکان پذیر است:


Public Function IsShamsi(ByVal shDate As String) As Boolean
On Error GoTo IsShamsiErrHandler
Dim pc As New Globalization.PersianCalendar
Dim ShamsiSeg() As String
ShamsiSeg = Split(shDate, "/")
Return IsDate(pc.ToDateTime(ShamsiSeg(0), ShamsiSeg(1), ShamsiSeg(2), 0, 0, 0, 0))
IsShamsiErrHandler:
End Function


این تابع رو در همان ماژول بالایی کپی کنید .

y.saied
شنبه 10 فروردین 1392, 13:50 عصر
ممنون دوست عزیز
حالا طرز استفاده از این تابع در رویداد LostFocus تکست باکس چه جوری هستش؟
شرمنده که سوالام خیلی مبتدیه ... بنده تازه برنامه نویسی رو شروع کردم ... ببخشید
اگه ممکنه یه مثال بذارین


سلام
احتیاجی به ایجاد تاپیک جدید برای تبدیل شمسی به میلادی نبود . عرض کردم که فقط بایستی درستی تاریخ شمسی بررسی شود . از اگر بخواهید خودتان بدون نیاز به PersianCalendar بنویسید حدود 15 خط کدنویسی احتیاج دارد ولی با استفاده از تابع زیر براحتی امکان پذیر است:


Public Function IsShamsi(ByVal shDate As String) As Boolean
On Error GoTo IsShamsiErrHandler
Dim pc As New Globalization.PersianCalendar
Dim ShamsiSeg() As String
ShamsiSeg = Split(shDate, "/")
Return IsDate(pc.ToDateTime(ShamsiSeg(0), ShamsiSeg(1), ShamsiSeg(2), 0, 0, 0, 0))
IsShamsiErrHandler:
End Function


این تابع رو در همان ماژول بالایی کپی کنید .

zahedi121
شنبه 10 فروردین 1392, 14:19 عصر
سلام
در قسمت کد نویسی ابتدا کنترلتون را انتخاب می کنید و بعد رویداد مورد نظرتون . حالا هر کدی در این رویداد بنویسید هنگامی انجام می شود که رویداد اتفاق بیفتد.
مثلا لاست فوکوس که شما گفتید باعث میشه وقتی از تکس باکس بیرون آمدید کد اتفاق بیفته.
102115

اگر هم منظورتون نحوه فراخوانی تابع در این رویداد هست :
a= IsShamsi ( textbox1.text) که یا ture هست یا false