24-09-16, 07:25 PM
(آخر تعديل لهذه المشاركة : 24-09-16, 07:26 PM {2} بواسطة silverlight.)
الأخ عبد الله
مبدئيا انا لاحظت انك تستخدم الفيجوال استوديو 2010 , و انا عند نسخة 2015
لذلك ربما الكود في المرفقات لا يفتح عندك لأني قمت بتعديل الكود الأصلي باستخدام نسخة 2015
عموم و كنوع من الحل لك حتي تستطيع كتابة الكود بنسخة 2010
افتح مشروع
اولا : تضيف للفورم الأتي
1- DateTimePicker1 و سيكون الهدف منها تحديد تاريخ بداية الأجازة
2- DateTimePicker2 و سيكون الهدف منها تحديد تاريخ نهاية الأجازة
3- TextBox1 و الهدف منه عرض اجمالي أيام الأجازة
4- ListBox1 لعرض الاجازات الوطنية
5- Button1 سنستخدمه لحساب عدد ايام ايام الأجازة الفعلية و إظهارها في التكست بوكس
و اكتب الكود في الفورم بالشكل التالي
مبدئيا انا لاحظت انك تستخدم الفيجوال استوديو 2010 , و انا عند نسخة 2015
لذلك ربما الكود في المرفقات لا يفتح عندك لأني قمت بتعديل الكود الأصلي باستخدام نسخة 2015
عموم و كنوع من الحل لك حتي تستطيع كتابة الكود بنسخة 2010
افتح مشروع
اولا : تضيف للفورم الأتي
1- DateTimePicker1 و سيكون الهدف منها تحديد تاريخ بداية الأجازة
2- DateTimePicker2 و سيكون الهدف منها تحديد تاريخ نهاية الأجازة
3- TextBox1 و الهدف منه عرض اجمالي أيام الأجازة
4- ListBox1 لعرض الاجازات الوطنية
5- Button1 سنستخدمه لحساب عدد ايام ايام الأجازة الفعلية و إظهارها في التكست بوكس
و اكتب الكود في الفورم بالشكل التالي
PHP كود :
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' أعتقد أنه لا يوجد فائدة لإظهار ايام الاجازات الوطنية لكن هذا للتوضيح فقك في كيفية عرضها داخل الليست بوكس
For Each s As String In GenerateNationalDateStrings()
ListBox1.Items.Add(s)
Next
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim starDate As DateTime = DateTimePicker1.Value
Dim endDate As DateTime = DateTimePicker2.Value
Dim annualLeave As Integer = 0
If endDate > starDate Then
annualLeave += GetAnnualLevaeDays(starDate, endDate)
Me.TextBox1.Text = annualLeave
Else
MessageBox.Show("تاريخ نهاية الأجازة يجب أن يكون أكبر من تاريخ بداية الأجازة", "خطأ", MessageBoxButtons.OK, MessageBoxIcon.Error)
Me.TextBox1.Text = ""
End If
End Sub
Private Function GetAnnualLevaeDays(startdate As DateTime, endDate As DateTime) As Integer
Return GetAnnualLevaeDays(GenerateAnnualDateStrings(startdate, endDate), GenerateNationalDateStrings())
End Function
Private Function GetAnnualLevaeDays(annualDates As String(), nationalDates As String()) As Integer
Return (annualDates.Intersect(nationalDates).Count) + (annualDates.Count)
End Function
Private Function GenerateNationalDateStrings(days As String(), months As String()) As String()
Dim dates As List(Of String) = New List(Of String)()
Dim total As Integer = days.Length - 1
For i As Integer = 0 To total
Dim d As String = days(i)
Dim m As String = months(i)
Dim y As String = DateTime.Now.Year.ToString()
Dim dt As String = String.Concat(New String() {d.ToString(Globalization.CultureInfo.CurrentCulture), "/", m.ToString(Globalization.CultureInfo.CurrentCulture), "/", y.ToString(Globalization.CultureInfo.CurrentCulture)})
dates.Add(dt)
Next
Return dates.ToArray
End Function
Private Function GenerateNationalDateStrings() As String()
Return GenerateNationalDateStrings({"22", "26", "14", "30"}, {"05", "09", "10", "11"})
End Function
Private Function GenerateAnnualDateStrings(startdate As DateTime, endDate As DateTime) As String()
Dim dates As New List(Of String)()
While startdate <= endDate
Dim s As String = CType(Convert.ChangeType(startdate.ToShortDateString, GetType(String)), String)
dates.Add(s)
startdate = startdate.AddDays(1)
End While
Return dates.ToArray
End Function
End Class

