جلوی هر خطی که لازم به توضیح بود. توضیح دادم. چون شما از goto استفاده کرده بودی من هم از این روش استفاده کردم.
Imports System.Globalization
Public Class Form1
Public shamsi As New Globalization.PersianCalendar
Private Sub MaskedTextBox1_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles MaskedT6.TextChanged
Try
If MaskedT6.MaskCompleted = True Then
If Val(MaskedT6.Text.Substring(5, 2)) > 12 Then GoTo M ' چک می کند تاریخ ماه بیشتر از 12 نباشد
If Val(MaskedT6.Text.Substring(8, 2)) > 31 Then GoTo D ' چک می کند تاریخ روز بیشتر 31 نباشد
Dim DateBrith As Date = ShamsiToMiladi(MaskedT6.Text) 'معادل میلادی تاریخ وارد شده حساب می شود ShamsiToMiladi از طریق تابع
Dim Y As Integer = DateDiff(DateInterval.Year, DateBrith, Now) ' اختلاف تاریخ به سال محاسبه می شود
DateBrith = DateBrith.AddYears(Y) 'اختلاف سال به DateBrith اضافه می شود
Dim M As Integer = DateDiff(DateInterval.Month, DateBrith, Now) ' اختلاف ماه محاسبه می شود
DateBrith = DateBrith.AddMonths(M) ' اختلاف ماه به DateBrith اضافه می شود
Dim D As Integer = DateDiff(DateInterval.Day, DateBrith, Now) ' اختلاف روز محاسبه می شود
MsgBox("your age is :" & Y & "/" & M & "/" & D)
sen.Text = Y & "/" & M & "/" & D
GoTo close
Else
GoTo close
End If
Catch ex As Exception
GoTo tryGo ' در صورتی که فرمت تاریخ صحیح نباشه مثلا تاریخ 1358/12/31 وارد شود. اسفند 31 روزه نداریم
End Try
M:
MsgBox("error Month")
GoTo close
D:
MsgBox("error Day")
GoTo close
tryGo:
MsgBox("error Format")
GoTo close
close:
End Sub
Public Function ShamsiToMiladi(ByVal SDate As String) As String
'تابع تبدیل تاریخ شمسی به میلادی
Dim pc As New Globalization.PersianCalendar
ShamsiToMiladi = ""
Dim Tarikh
Tarikh = Split(SDate, "/")
ShamsiToMiladi = (pc.ToDateTime(Tarikh(0), Tarikh(1), Tarikh(2), 0, 0, 0, 0))
Return ShamsiToMiladi
End Function
End Class