PDA

View Full Version : کمک جهت نوشتن یک کلاس تقویم فارسی



swallow.pa
یک شنبه 21 اسفند 1390, 22:02 عصر
سلام به همه
من توی سایت نگاه کردم یک تایپیک نظر منو جلب کرد
http://barnamenevis.org/showthread.php?329591-%DA%AF%D8%B0%D8%A7%D8%B4%D8%AA%D9%86-%D8%AA%D8%A7%D8%B1%D9%8A%D8%AE-%D9%81%D8%A7%D8%B1%D8%B3%D9%8A&highlight=PersianCalendar

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

متشکرم

aftabeshargh
یک شنبه 21 اسفند 1390, 22:32 عصر
سلام
یه نمونه برنامه گذاشتم " ببینید همینو میخواستید ؟
:چشمک:

swallow.pa
جمعه 26 اسفند 1390, 17:27 عصر
دوستان من این کدها رو توی یک کلاس نوشتم


Public Class FarsiDate
Dim PClndr As New Globalization.PersianCalendar

Public Function TodayInIran() As String



TodayInIran = PClndr.GetYear(Now)
TodayInIran &= "/" & Strings.Right(("0" & PClndr.GetMonth(Now)), 2)
TodayInIran &= "/" & Strings.Right(("0" & PClndr.GetDayOfMonth(Now)), 2)

End Function

End Class

و بعد توی ماجل یک تعریف از نوع تقویم مینمودم


Public Taghvim As FarsiDate

و حالا نوبت فراخوانیه



Private Sub MDI_Load(sender As Object, e As System.EventArgs) Handles Me.Load
Me.Text = Taghvim.TodayInIran.ToString
End Sub



که این خطا رو می زنه



System.NullReferenceException was unhandled
Message=Object reference not set to an instance of an object.
Source=prjct
StackTrace:
at prjct.MDI.MDI_Load(Object sender, EventArgs e) in F:\Vb2010\prjct\Forms\MDI.vb:line 35
at System.EventHandler.Invoke(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnLoad(EventArgs e)
at System.Windows.Forms.Form.OnCreateControl()
at System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible)
at System.Windows.Forms.Control.CreateControl()
at System.Windows.Forms.Control.WmShowWindow(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Mes sage& m)
at System.Windows.Forms.Form.WmShowWindow(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.O nMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.W ndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallba ck(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.SendMessa ge(HandleRef hWnd, Int32 msg, Int32 wParam, Int32 lParam)
at System.Windows.Forms.Form.SetVisibleCore(Boolean value)
at System.Windows.Forms.Control.set_Visible(Boolean value)
at System.Windows.Forms.Application.ThreadContext.Run MessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.Run MessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(ApplicationCo ntext context)
at Microsoft.VisualBasic.ApplicationServices.WindowsF ormsApplicationBase.OnRun()
at Microsoft.VisualBasic.ApplicationServices.WindowsF ormsApplicationBase.DoApplicationModel()
at Microsoft.VisualBasic.ApplicationServices.WindowsF ormsApplicationBase.Run(String[] commandLine)
at MbsHesab.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.Run UsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context( Object state)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionCon text executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:


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

mostafaaa
جمعه 26 اسفند 1390, 17:54 عصر
سلام
ببین این به کارت میاد

Imports System.Globalization
Public Class PerCalander
Sub New()
_PersianCalander = New PersianCalendar
End Sub
Private _PersianCalander As PersianCalendar
Public Enum PersianMounth As Integer
فروردین = 1
اردیبهشت = 2
خرداد = 3
تیر = 4
مرداد = 5
شهریور = 6
مهر = 7
آبان = 8
آذر = 9
دی = 10
بهمن = 11
اسفند = 12
End Enum
Public Enum DateFormat As Integer
[Long] = 0
[Short] = 1
End Enum
Public Function GetYear(ByVal Gdate As Date) As Integer
Return _PersianCalander.GetYear(Gdate)
End Function
''' <summary>
''' Convert Month Persian name to equal integer value
''' for example: فروردین = 1
''' </summary>
''' <param name="strMonth">month name (persian name) as string </param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetMonthFromStrName(ByVal strMonth As String) As Integer
Dim PM As PersianMounth = [Enum].Parse(GetType(PersianMounth), strMonth)
Return PM
End Function
Public Function GetMonth(ByVal Gdate As Date) As Integer
Return _PersianCalander.GetMonth(Gdate)
End Function
Public Function GetDay(ByVal Gdate As Date) As Integer
Return _PersianCalander.GetDayOfMonth(Gdate)
End Function
''' <summary>
''' Get the Persian name of the monthe
''' </summary>
''' <param name="IntMonth">Month number in year</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetMonthName(ByVal IntMonth As Integer) As String
Dim PM As PersianMounth = IntMonth
Return PM.ToString
End Function
''' <summary>
''' Get the first day of the month that represented by this argumans
''' </summary>
''' <param name="PersianYear"></param>
''' <param name="PersianMonth"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetFirstDayOfMonth(ByVal PersianYear As Integer, ByVal PersianMonth As Integer) As Integer
Dim Gdate As Date = _PersianCalander.ToDateTime(PersianYear, PersianMonth, 1, 1, 1, 1, 1)
Dim intDate As Integer = Gdate.DayOfWeek
If intDate < 6 Then
Return intDate + 2
Else
Return 1
End If
End Function
''' <summary>
''' Get the Number of the days in the specified month and year
''' </summary>
''' <param name="PersianYear"></param>
''' <param name="PersianMonth"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetDaysInMonth(ByVal PersianYear As Integer, ByVal PersianMonth As Integer) As Integer
Return _PersianCalander.GetDaysInMonth(PersianYear, PersianMonth)
End Function

Public Function IsToDay(ByVal PersianYear As Integer, ByVal PersianMonth As Integer, ByVal PersianDay As Integer) As Boolean
Dim temDate As Date = _PersianCalander.ToDateTime(PersianYear, PersianMonth, PersianDay, 1, 1, 1, 1)
If temDate.Date = Date.Now.Date Then
Return True
Else
Return False
End If
End Function
''' <summary>
''' Convert specified persian date to Gregorian date
''' </summary>
''' <param name="PersianYear"></param>
''' <param name="PersianMonth"></param>
''' <param name="PersianDay"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function ConvertToGregorianDate(ByVal PersianYear As Integer, ByVal PersianMonth As Integer, ByVal PersianDay As Integer) As Date
Try
Return _PersianCalander.ToDateTime(PersianYear, PersianMonth, PersianDay, 1, 1, 1, 1)
Catch ex As Exception
Try
Return _PersianCalander.ToDateTime(PersianYear, PersianMonth, PersianDay - 1, 1, 1, 1, 1)
Catch ex2 As Exception
Return _PersianCalander.ToDateTime(PersianYear, PersianMonth, PersianDay - 2, 1, 1, 1, 1)
End Try

End Try
End Function
''' <summary>
''' Get the string name of the persian date with the specified Gregorian date
''' </summary>
''' <param name="GDate"></param>
''' <param name="Format"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetPersianDate(ByVal GDate As Date, ByVal Format As DateFormat) As String
Dim Days() As String = {"شنبه", "یک شنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه"}
If Format = DateFormat.[Long] Then
Dim intDayofWeek As Integer = _PersianCalander.GetDayOfWeek(GDate)
Dim strMonth As String = GetMonthName(_PersianCalander.GetMonth(GDate))
Dim strDay As String
If intDayofWeek < 6 Then
strDay = Days(intDayofWeek + 1)
Else
strDay = Days(0)
End If
Return strDay & " , " & _PersianCalander.GetDayOfMonth(GDate) & _
" " & strMonth & " , " & _PersianCalander.GetYear(GDate)
Else
Dim strDay, strMonth As String
strDay = _PersianCalander.GetDayOfMonth(GDate)
If strDay.Length = 1 Then strDay = "0" & strDay
strMonth = _PersianCalander.GetMonth(GDate)
If strMonth.Length = 1 Then strMonth = "0" & strMonth
Return _PersianCalander.GetYear(GDate) & "/" & strMonth & "/" & strDay
End If
End Function
End Class

swallow.pa
جمعه 26 اسفند 1390, 18:18 عصر
سلام
ببین این به کارت میاد

Imports System.Globalization
Public Class PerCalander
Sub New()
_PersianCalander = New PersianCalendar
End Sub
Private _PersianCalander As PersianCalendar
Public Enum PersianMounth As Integer
فروردین = 1
اردیبهشت = 2
خرداد = 3
تیر = 4
مرداد = 5
شهریور = 6
مهر = 7
آبان = 8
آذر = 9
دی = 10
بهمن = 11
اسفند = 12
End Enum
Public Enum DateFormat As Integer
[Long] = 0
[Short] = 1
End Enum
Public Function GetYear(ByVal Gdate As Date) As Integer
Return _PersianCalander.GetYear(Gdate)
End Function
''' <summary>
''' Convert Month Persian name to equal integer value
''' for example: فروردین = 1
''' </summary>
''' <param name="strMonth">month name (persian name) as string </param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetMonthFromStrName(ByVal strMonth As String) As Integer
Dim PM As PersianMounth = [Enum].Parse(GetType(PersianMounth), strMonth)
Return PM
End Function
Public Function GetMonth(ByVal Gdate As Date) As Integer
Return _PersianCalander.GetMonth(Gdate)
End Function
Public Function GetDay(ByVal Gdate As Date) As Integer
Return _PersianCalander.GetDayOfMonth(Gdate)
End Function
''' <summary>
''' Get the Persian name of the monthe
''' </summary>
''' <param name="IntMonth">Month number in year</param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetMonthName(ByVal IntMonth As Integer) As String
Dim PM As PersianMounth = IntMonth
Return PM.ToString
End Function
''' <summary>
''' Get the first day of the month that represented by this argumans
''' </summary>
''' <param name="PersianYear"></param>
''' <param name="PersianMonth"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetFirstDayOfMonth(ByVal PersianYear As Integer, ByVal PersianMonth As Integer) As Integer
Dim Gdate As Date = _PersianCalander.ToDateTime(PersianYear, PersianMonth, 1, 1, 1, 1, 1)
Dim intDate As Integer = Gdate.DayOfWeek
If intDate < 6 Then
Return intDate + 2
Else
Return 1
End If
End Function
''' <summary>
''' Get the Number of the days in the specified month and year
''' </summary>
''' <param name="PersianYear"></param>
''' <param name="PersianMonth"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetDaysInMonth(ByVal PersianYear As Integer, ByVal PersianMonth As Integer) As Integer
Return _PersianCalander.GetDaysInMonth(PersianYear, PersianMonth)
End Function

Public Function IsToDay(ByVal PersianYear As Integer, ByVal PersianMonth As Integer, ByVal PersianDay As Integer) As Boolean
Dim temDate As Date = _PersianCalander.ToDateTime(PersianYear, PersianMonth, PersianDay, 1, 1, 1, 1)
If temDate.Date = Date.Now.Date Then
Return True
Else
Return False
End If
End Function
''' <summary>
''' Convert specified persian date to Gregorian date
''' </summary>
''' <param name="PersianYear"></param>
''' <param name="PersianMonth"></param>
''' <param name="PersianDay"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function ConvertToGregorianDate(ByVal PersianYear As Integer, ByVal PersianMonth As Integer, ByVal PersianDay As Integer) As Date
Try
Return _PersianCalander.ToDateTime(PersianYear, PersianMonth, PersianDay, 1, 1, 1, 1)
Catch ex As Exception
Try
Return _PersianCalander.ToDateTime(PersianYear, PersianMonth, PersianDay - 1, 1, 1, 1, 1)
Catch ex2 As Exception
Return _PersianCalander.ToDateTime(PersianYear, PersianMonth, PersianDay - 2, 1, 1, 1, 1)
End Try

End Try
End Function
''' <summary>
''' Get the string name of the persian date with the specified Gregorian date
''' </summary>
''' <param name="GDate"></param>
''' <param name="Format"></param>
''' <returns></returns>
''' <remarks></remarks>
Public Function GetPersianDate(ByVal GDate As Date, ByVal Format As DateFormat) As String
Dim Days() As String = {"شنبه", "یک شنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه"}
If Format = DateFormat.[Long] Then
Dim intDayofWeek As Integer = _PersianCalander.GetDayOfWeek(GDate)
Dim strMonth As String = GetMonthName(_PersianCalander.GetMonth(GDate))
Dim strDay As String
If intDayofWeek < 6 Then
strDay = Days(intDayofWeek + 1)
Else
strDay = Days(0)
End If
Return strDay & " , " & _PersianCalander.GetDayOfMonth(GDate) & _
" " & strMonth & " , " & _PersianCalander.GetYear(GDate)
Else
Dim strDay, strMonth As String
strDay = _PersianCalander.GetDayOfMonth(GDate)
If strDay.Length = 1 Then strDay = "0" & strDay
strMonth = _PersianCalander.GetMonth(GDate)
If strMonth.Length = 1 Then strMonth = "0" & strMonth
Return _PersianCalander.GetYear(GDate) & "/" & strMonth & "/" & strDay
End If
End Function
End Class

دوست من از لطفتون سپاسگذارم کد شما مطمئنا بدرد میخوره
ولی اگه امکان داره کد من رو اصلاح کنید چون می خوام یاد بگیرم
متشکرم

فرید نجفلو
جمعه 26 اسفند 1390, 18:46 عصر
دوست عزیز اگه به خط دوم خطا دقت می کردید متوجه می شدید!
شما یه NEW جا انداختید!:تشویق:

Public Taghvim As New FarsiDate


و یه نکته:
تو این خط نیازی به Tostring ندارید چون خودش از قبل String هست
Taghvim.TodayInIran.ToString

swallow.pa
جمعه 26 اسفند 1390, 19:01 عصر
دوست من ممنون
درست شد
حالا با بدست آوردن تاریخ می خوام نام ماهها رو داشته باشم چطوری توی برنامه با این کدها توی کلاسی که دارم نام ماهها رو بدست بیارم توی پستهای قبلی هست اما متوجه نمی شم
لطفا با توجه به کلاسی که کمک کردید و ساختم فقط تا بدست آوردن نام ماه کمک کنید step by step
متشکرم

فرید نجفلو
جمعه 26 اسفند 1390, 19:57 عصر
این کد ها رو از کلاس پست 4 (http://barnamenevis.org/showthread.php?332007-کمک-جهت-نوشتن-یک-کلاس-تقویم-فارسی&p=1465722&viewfull=1#post1465722) به کلاس خودت اضافه کن:
Public Enum PersianMounth As Integer
فروردین = 1
اردیبهشت = 2
خرداد = 3
تیر = 4
مرداد = 5
شهریور = 6
مهر = 7
آبان = 8
آذر = 9
دی = 10
بهمن = 11
اسفند = 12
End Enum

Public Function GetMonthName(ByVal IntMonth As Integer) As String
Dim PM As PersianMounth = IntMonth
Return PM.ToString
End Function

swallow.pa
جمعه 26 اسفند 1390, 20:19 عصر
این کد ها رو از کلاس پست 4 (http://barnamenevis.org/showthread.php?332007-%DA%A9%D9%85%DA%A9-%D8%AC%D9%87%D8%AA-%D9%86%D9%88%D8%B4%D8%AA%D9%86-%DB%8C%DA%A9-%DA%A9%D9%84%D8%A7%D8%B3-%D8%AA%D9%82%D9%88%DB%8C%D9%85-%D9%81%D8%A7%D8%B1%D8%B3%DB%8C&p=1465722&viewfull=1#post1465722) به کلاس خودت اضافه کن:
Public Enum PersianMounth As Integer
فروردین = 1
اردیبهشت = 2
خرداد = 3
تیر = 4
مرداد = 5
شهریور = 6
مهر = 7
آبان = 8
آذر = 9
دی = 10
بهمن = 11
اسفند = 12
End Enum

Public Function GetMonthName(ByVal IntMonth As Integer) As String
Dim PM As PersianMounth = IntMonth
Return PM.ToString
End Function

با تشکر از شما لطفا در مورد
Enum توضیح یدید

mostafaaa
جمعه 26 اسفند 1390, 21:20 عصر
enmu فرم خاصي از انواع مقداري (Value Type) است كه از System.Enum مشتق شده و امكان پيمايش درون مجموعه‌اي مشخص را با استفاد از اعداد صحصيح براي ما فراهم مي‌نمايد. با استفاده از enum مي‌توان مجموعه‌اي از مقادير ثابت را تعريف نمود كه اين مقادير ثابت با استفاده از يك عدد صحيح قابل دسترسي هستند.

استفاده از enum در برنامه‌ها باعث بالا رفتن خوانايي برنامه مي‌شود، چراكه با استفاده از آنها مي‌توان با مجموعه‌اي از اعداد صحيح ترتيبي (Sequential) ، با عناويني تعريف شده، كار كرد. براي مثال، در اعلان يك enum، ما مجموعه‌اي از نامهاي مورد نظر را تعريف مي‌نماييم و در برنامه مي‌توانيم از اين نامها بصورت ترتيبي استفاده نماييم. Enum به هر يك از عناصر موجود در اين مجموعه عددي را تخصيص مي‌دهد كه شروع اين عدد مي‌تواند توسط برنامه‌نويس نيز معين گردد. سپس با استفاده از نام عناصر موجود در enum و يا با استفاده از اعدادي كه به هر يك از اين عناصر تخصيص داده شده، مي‌توان enum را پيمايش نمود و به عناصر آن دسترسي داشت.

منبع و اطلاعات بیشتر .... (http://rossoftco.blogfa.com/post-73.aspx)
و در آخر قبل از طرح سوال کمی جستجو کنید...

swallow.pa
جمعه 26 اسفند 1390, 21:21 عصر
دوستان از لطفتون سپاسگذارم
Enum در حقیقت یه چیزی توی مایه ایجاد کردن ثوابت ولی با حالت متغیره
اما دوستمون mostafaaa http://barnamenevis.org/images/buttons/viewpost-left.png (http://barnamenevis.org/showthread.php?p=1465722#post1465722) گفتن جستجو کنید من یک مقدار جستجو رو انجام دادم و کدهای زیادی رو دیدم با توجه به اینکه مبتدی هستم تحلیل اونها برام سخته اما این کدهائی که اینجا هست و می ذارم خیلی راحت کار می کنم و متوجه می شم چون دارم قدم به قدم پیش می رم
سوال اول : با توجه به استفاده از توابع کتابخانه تاریخ خود وی بی مشکل با سال کبیسه نداریم؟
سوال دوم
کدها رو اینجوری اصلاح کردم


Public Class FarsiDate
Dim PClndr As New Globalization.PersianCalendar

Public Function TodayInIran() As String
TodayInIran = PClndr.GetYear(Now)
TodayInIran &= "/" & Strings.Right(("0" & PClndr.GetMonth(Now)), 2)
TodayInIran &= "/" & Strings.Right(("0" & PClndr.GetDayOfMonth(Now)), 2)
End Function
Public Enum PersianMonth As Integer
فروردین = 1
اردیبهشت = 2
خرداد = 3
تیر = 4
مرداد = 5
شهریور = 6
مهر = 7
آبان = 8
آذر = 9
دی = 10
بهمن = 11
اسفند = 12
End Enum

Public Function MonthName() As String
Dim PM As PersianMonth = Mid(TodayInIran, 6, 2)
Return PM.ToString
End Function

Public Function TodayByMonthName() As String
TodayByMonthName = PClndr.GetYear(Now)
TodayByMonthName &= " " & MonthName()
TodayByMonthName &= " " & Strings.Right(("0" & PClndr.GetDayOfMonth(Now)), 2)
End Function



End Class



حالا می خوام ایام هفته رو داشته باشم
چیکار کنم
مثلا شنبه 28 اسفند 1390

فرید نجفلو
جمعه 26 اسفند 1390, 23:21 عصر
این کد ها رو به کلاست اضافه کن :

Public Function DayName() As String
Dim Days() As String = {"یک شنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه", "شنبه"}
Dim intDayofWeek As Integer = PClndr.GetDayOfWeek(Now)
Return Days(intDayofWeek)
End Function
Public Function TodayInIranLong() As String
Dim IranLongDate As String = ""
IranLongDate &= DayName() & " "
IranLongDate &= PClndr.GetMonth(Now) & " "
IranLongDate &= MonthName() & " "
IranLongDate &= PClndr.GetYear(Now)
Return IranLongDate
End Function


البته تاکید می کنم که این کد ها طبق خواسته شما ست. در واقع باید این توابع یک پارامتر تاریخ بگیرن و از اون به جای Now استفاده کنن و این کار ما(تاریخ امروز) هم به این شکل باشه که ما Now رو به تابع بفرستیم و تاریخ امروز رو برگردونه نه اینکه برای تاریخ امروز یه تابع جدا داشته باشیم!

swallow.pa
شنبه 27 اسفند 1390, 16:21 عصر
این کد ها رو به کلاست اضافه کن :

Public Function DayName() As String
Dim Days() As String = {"یک شنبه", "دو شنبه", "سه شنبه", "چهار شنبه", "پنج شنبه", "جمعه", "شنبه"}
Dim intDayofWeek As Integer = PClndr.GetDayOfWeek(Now)
Return Days(intDayofWeek)
End Function
Public Function TodayInIranLong() As String
Dim IranLongDate As String = ""
IranLongDate &= DayName() & " "
IranLongDate &= PClndr.GetMonth(Now) & " "
IranLongDate &= MonthName() & " "
IranLongDate &= PClndr.GetYear(Now)
End Function


البته تاکید می کنم که این کد ها طبق خواسته شما ست. در واقع باید این توابع یک پارامتر تاریخ بگیرن و از اون به جای Now استفاده کنن و این کار ما(تاریخ امروز) هم به این شکل باشه که ما Now رو به تابع بفرستیم و تاریخ امروز رو برگردونه نه اینکه برای تاریخ امروز یه تابع جدا داشته باشیم!

دوست من از لطف شما سپاسگذارم
چرا این خطا رو می زنه توی اند فانکشن تودی این ایران لانگ
Warning 1 Function 'TodayInIranLong' doesn't return a value on all code paths. A null reference exception could occur at run time when the result is used. F:\Vb2010\prjct\Settings\FarsiDate.vb 46 5

فرید نجفلو
شنبه 27 اسفند 1390, 16:40 عصر
تو خط آخر تابع باید می نوشتم :
Return IranLongDate
(پست اصلی هم اصلاح شد!)

swallow.pa
شنبه 27 اسفند 1390, 20:07 عصر
تو خط آخر تابع باید می نوشتم :
Return IranLongDate
(پست اصلی هم اصلاح شد!)
با تشکر از شما
کدی هم برای چک کردن تاریخ ورودی توسط کاربر نوشتم ببینید و نظر بدید


Public Function Check_Date(ByVal txtDate As String) As Boolean
Dim FarsiNum As String
Check_Date = False
FarsiNum = ""
If txtDate = "" Then Exit Function
If txtDate.Length <> 10 Then Exit Function

If Len(txtDate) <> 10 Then Exit Function

If Mid(txtDate, 6, 2) > 12 Then Exit Function
FarsiNum = Mid(txtDate, 6, 2)
If FarsiNum = 1 Then
If Mid(txtDate, 9, 2) > 31 Then Exit Function
End If
If FarsiNum = 2 Then
If Mid(txtDate, 9, 2) > 31 Then Exit Function
End If
If FarsiNum = 3 Then
If Mid(txtDate, 9, 2) > 31 Then Exit Function
End If
If FarsiNum = 4 Then
If Mid(txtDate, 9, 2) > 31 Then Exit Function
End If
If FarsiNum = 5 Then
If Mid(txtDate, 9, 2) > 31 Then Exit Function
End If
If FarsiNum = 6 Then
If Mid(txtDate, 9, 2) > 31 Then Exit Function
End If
If FarsiNum = 7 Then
If Mid(txtDate, 9, 2) > 30 Then Exit Function
End If
If FarsiNum = 8 Then
If Mid(txtDate, 9, 2) > 30 Then Exit Function
End If
If FarsiNum = 9 Then
If Mid(txtDate, 9, 2) > 30 Then Exit Function
End If
If FarsiNum = 10 Then
If Mid(txtDate, 9, 2) > 30 Then Exit Function
End If
If FarsiNum = 11 Then
If Mid(txtDate, 9, 2) > 30 Then Exit Function
End If
If FarsiNum = 12 Then
If Mid(txtDate, 9, 2) > 30 Then Exit Function
End If
Check_Date = True
End Function


اگه اشکالی داره اونو اصلاح کنید
ممنونم

swallow.pa
شنبه 27 اسفند 1390, 22:48 عصر
دوستان نظری ندادید
حالا اگه طبق کدهای قبلی این فرمت رو بخوام چیکار کنم
مثلا بیستم اسفند هزار و سیصد و نود

فرید نجفلو
شنبه 27 اسفند 1390, 22:56 عصر
کد شما بکمی اصلاح و خلاصه نویسی میشه:
Public Function Check_Date(ByVal txtDate As String) As Boolean
Dim MonthNum As String
MonthNum = ""
If txtDate.Length <> 10 Then Return False
If Not IsNumeric(txtDate.Replace("/", "")) Then Return False
If Mid(txtDate, 1, 4) < 1300 OrElse Mid(txtDate, 1, 4) > 1500 Then Return False
MonthNum = Mid(txtDate, 6, 2)
If Not IsNumeric(MonthNum) OrElse MonthNum > 12 OrElse MonthNum < 1 Then Return False
Select Case MonthNum
Case 1 To 6
If Mid(txtDate, 9, 2) > 31 Then Return False
Case 7 To 12
If Mid(txtDate, 9, 2) > 30 Then Return False
'با اسفند سال های غیر کبیسه مشکل داره!
Case Else
Return False
End Select
Return True
End Function

swallow.pa
شنبه 27 اسفند 1390, 22:57 عصر
دوستان نظری ندادید
حالا اگه طبق کدهای قبلی این فرمت رو بخوام چیکار کنم
مثلا بیستم اسفند هزار و سیصد و نود

mostafaaa
یک شنبه 28 اسفند 1390, 07:49 صبح
سلام
برای چک کردن درستی تاریخ میتونید از کد زیر هم استفاده کنید.

Public Function CheckDate(ByVal Year As Integer, ByVal Month As Integer, ByVal Day As Integer) As Boolean
Dim percal As New System.Globalization.PersianCalendar
Try
percal.ToDateTime(Year, Month, Day, 1, 1, 1, 1)
Catch ex As Exception
Return False
End Try
Return True
End Function

swallow.pa
یک شنبه 28 اسفند 1390, 17:51 عصر
از لطف همتون سپاسگذارم
حالا برای بحروف در آوردن تاریخ چیکار کنم
مثلا: بیست و هشتم اسفند هزار و سیصد و نود

فرید نجفلو
یک شنبه 28 اسفند 1390, 20:27 عصر
این یکی تابعش نسبتا پیچیده تره
چون باید یه تابع تبدیل عدد به حروف کامل داشته باشی!
من یکی دارم ولی باید ساده ترش کنم تا واسه مبتدی ها هم بدرد بخوره
اگه تا اون وموقع سایر دوستان نذاشتن من می فرستم:لبخندساده:

swallow.pa
چهارشنبه 02 فروردین 1391, 13:35 عصر
با سلام مجدد
این کد مشکل داره


Public Function TodayInIranLong() As String
Dim IranLongDate As String = ""
IranLongDate &= DayName() & " "
IranLongDate &= PClndr.GetMonth(Now) & " "
IranLongDate &= MonthName() & " "
IranLongDate &= PClndr.GetYear(Now)
Return IranLongDate
End Function

چون نمایش میده چهارشنبه 1 فروردین 1391 دلیلش رو متوجه نمی شم

swallow.pa
یک شنبه 13 فروردین 1391, 16:57 عصر
دوستان کد این قسمت اصلاح شد:


Public Function TodayInIranLong() As String
Dim IranLongDate As String = ""
IranLongDate &= DayName() & " "
IranLongDate &= PClndr.GetDayOfMonth(Now) & " "
IranLongDate &= MonthName() & " "
IranLongDate &= PClndr.GetYear(Now)
Return IranLongDate
End Function

JaVa
یک شنبه 13 فروردین 1391, 17:04 عصر
سلام...

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

این هم لینکش.
http://barnamenevis.org/showthread.php?333133-%D8%AF%D8%A7%D9%86%D9%84%D9%88%D8%AF-%DA%A9%D9%86%DB%8C%D8%AF-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%B4%D9%85%D8%B3%DB%8C-%D8%A8%D8%B5%D9%88%D8%B1%D8%AA-%D8%AD%D8%B1%D9%88%D9%81&highlight=%D8%AA%D9%82%D9%88%DB%8C%D9%85

پیروز باشید./