PDA

View Full Version : سوال: ایجاد textbox و label به صورت دینامیک در زمان اجرا



mohsenm66
چهارشنبه 29 اردیبهشت 1395, 18:13 عصر
سلام خدمت تمام دوستان برنامه نویس
من میخوام یه فرم در برنامه ام داشته باشم که یک بازه زمانی را از کاربر دربافت کند و بر اساس آن به تعداد روزها textbox ایجاد کند و روبروی هر کدام یه لیبل که تاریخ اون روز را نشان دهد
میشه لطف کنید راهنماییم کنید

gilsoft
یک شنبه 02 خرداد 1395, 09:31 صبح
سلام خدمت تمام دوستان برنامه نویس
من میخوام یه فرم در برنامه ام داشته باشم که یک بازه زمانی را از کاربر دربافت کند و بر اساس آن به تعداد روزها textbox ایجاد کند و روبروی هر کدام یه لیبل که تاریخ اون روز را نشان دهد
میشه لطف کنید راهنماییم کنید

سلام دوست عزیز

اینم کدی که میخواستی:
Imports VB = Microsoft.VisualBasic
Imports System.Globalization

Public Class Form3

#Region "Date Functions"
Enum eYMD
Year = 0
Month = 1
Day = 2
End Enum

Enum eDateFormat
DMY = 0
YMD = 1
MDY = 2
End Enum

Public GPC As New System.Globalization.PersianCalendar

Public Function Shamsi_Now() As String
Dim mDT As Date = Date.Now
Return (String.Format("{0}/{1:00}/{2:00}", {GPC.GetYear(mDT), GPC.GetMonth(mDT), GPC.GetDayOfMonth(mDT)}))
End Function 'Shamsi_Now() As String تاریخ روز (شمسی) را برمیگرداند

Public Function ShToMi(ByVal pDate As String) As String
pDate = pDate.Trim
If pDate = String.Empty Then Return (Shamsi_Now())
If pDate.IndexOf(":") > 0 Then pDate = VB.Left(pDate, pDate.IndexOf(" "))
If pDate.Length = 8 And Val(pDate) < 100 Then pDate = "13" & pDate.Trim
Dim splt() As String = Split(pDate, "/") : Dim _YY As UShort = Val(splt(0)) : Dim _MM As Byte = Val(splt(1)) : Dim _DD As Byte = Val(splt(2))
Return (GPC.ToDateTime(_YY, _MM, _DD, TimeOfDay.Hour, TimeOfDay.Minute, TimeOfDay.Second, TimeOfDay.Millisecond).ToString("yyyy/MM/dd"))
End Function 'ShToMi() As String تبدیل تاریخ شمسی به میلادی

Public Function ShDateAddDays(pDate As String, days As Integer) As String
Dim value As String = ""
pDate = pDate.Trim
If pDate = String.Empty Then Return (Shamsi_Now())
value = GPC.AddDays(pDate, days).ToString("yyyy/MM/dd")
Return value
End Function 'ShDateAddDays() AS String اضافه کردن (جمع و تفریق) روز به تاریخ شمسی


Public Function shDateDiff(pDate1 As String, pDate2 As String) As Long
Dim Value As Long = 0
Value = DateDiff(DateInterval.Day, CDate(ShToMi(pDate1)), CDate(ShToMi(pDate2)), FirstDayOfWeek.Saturday, FirstWeekOfYear.System)
Return Value
End Function 'روزهای بین 2 تاریخ شمسی را برمیگرداند
#End Region 'Date Functions

Private WithEvents TBox As TextBox
Private WithEvents LBox As Label

Dim Date1 As String : Dim Date2 As String
Dim Ddiff As Integer

Private Sub Form3_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
Me.AcceptButton = Button1
Button1.Text = "Create"
TextBox1.Text = "1395/01/27"
TextBox2.Text = "1395/02/05"
End Sub

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

Date1 = TextBox1.Text.Trim
Date2 = TextBox2.Text.Trim
Ddiff = CInt(shDateDiff(Date1, Date2))

Dim X As Integer = 12
Dim Y As Integer = 12

Dim Xindent As Integer = 3
Dim Yindent As Integer = 3

Dim pDate As String = Date1

For i As Integer = 1 To Ddiff
pDate = ShDateAddDays(pDate, 1)
TBox = New TextBox
With TBox
.Top = X
.Left = Y
.BorderStyle = BorderStyle.FixedSingle
End With
LBox = New Label
With LBox
.Top = X
.Left = Y + Yindent + TBox.Width
.Height = TBox.Height
.BorderStyle = BorderStyle.FixedSingle
.Text = pDate
End With
Me.Controls.AddRange({TBox, LBox})
X = TBox.Height + Xindent + TBox.Top
Next
End Sub
End Class

عرض کنم که: مطمئناً این کد کامل نیست .. باید ازش ایده بگیری

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

mohsenm66
یک شنبه 02 خرداد 1395, 11:08 صبح
دوست عزیز متشکر
ولی یه مشکلی که داره اینه که اولین روز را حساب نمیکنه و از روز دوم حساب میکنه . در برنامه شما روز بیست و هفتم را حساب نمیکنه و از بیست و هشت ایجاد میکنه
فکر کنم مشکلش اینجاست که ماه 31 روز هست میشه یه راهنمایی بکنید

gilsoft
یک شنبه 02 خرداد 1395, 12:10 عصر
دوست عزیز متشکر
ولی یه مشکلی که داره اینه که اولین روز را حساب نمیکنه و از روز دوم حساب میکنه . در برنامه شما روز بیست و هفتم را حساب نمیکنه و از بیست و هشت ایجاد میکنه
فکر کنم مشکلش اینجاست که ماه 31 روز هست میشه یه راهنمایی بکنید

سلام مجدد

سطرهای 76 تا 79 رو به شکل زیر تغییر بده:
Dim pDate As String = Date1
pDate = ShDateAddDays(pDate, -1)
For i As Integer = 0 To Ddiff
pDate = ShDateAddDays(pDate, 1)



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

mohsenm66
پنج شنبه 17 تیر 1395, 09:13 صبح
سلام مجدد

سطرهای 76 تا 79 رو به شکل زیر تغییر بده:
Dim pDate As String = Date1
pDate = ShDateAddDays(pDate, -1)
For i As Integer = 0 To Ddiff
pDate = ShDateAddDays(pDate, 1)



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

دوست عزیز ممنون از راهنماییتون
.ولی من باز یه مشکل دیگه هم دارم و اون اینه که ماههای که 31 روز ه نیست را نیز 31 روزه حساب میکنه