PDA

View Full Version : خبر: کلاس کنترل ماسک جهت ورود تاریخ شمسی



ali_md110
جمعه 21 تیر 1392, 14:51 عصر
سلام دوستان
ما میتونیم از کلاس MaskedTextBox درون یک کلاس دیگه ارث بری کنیم و از متدها و خواص کلاس MaskedTextBox و متدهای کلاس Persian calendar استفاده کرده و یک کنترل سفارشی بسازیم
کلاسی که نوشتم میاد یک ماسک کنترل برای تاریخ میسازه به نحوی که فوکوس در اول ماسک بر روی روز قرار میگیره وقتی کاربر مثلا 01 را برای روز وارد کرد بلافاصله فوکوس به فیلد ماه رفته و با نوشتن 02 برای ماه باز بلافاصله فوکوس به فیلد سال منتقل میشود و همزمان با تکمیل تاریخ تولتیپ تاریخ بصورت حروفی در زیر ان نمایش داده میشه
میتونید باز تغییراتی درون کلاس بدید و تغییرات دلخواهتون بدید و بیشتر شخصی سازیش کنید.




'<><><><><<><><><><><><><<><>><><><><
'><>><><<>><><><><<>><><><><>><><<>><
'<>><<>><><<>><><><><><><><><><><><><
Public Class DateTextBox
Inherits MaskedTextBox
Private WithEvents errper As Windows.Forms.ErrorProvider
Private WithEvents ToolTip1 As Windows.Forms.ToolTip
Public Sub New()
Dim pc As New Globalization.PersianCalendar
Dim valStr As String = String.Format("{0}/{1}/{2}", Microsoft.VisualBasic.Right(pc.GetYear(Date.Now), 2), Format(pc.GetMonth(Date.Now), "00"), Format(pc.GetDayOfMonth(Date.Now), "00"))
Me.Mask = "##/##/##"
Me.Text = valStr
Me.Font = New System.Drawing.Font("Tahoma_Asman", 9)
errper = New Windows.Forms.ErrorProvider
ToolTip1 = New Windows.Forms.ToolTip
End Sub
Public Overrides Property Text() As String
Get
Dim pc As New Globalization.PersianCalendar
Dim valStr As String = Microsoft.VisualBasic.Left(pc.GetYear(Date.Now), 2)
Return valStr & MyBase.Text
End Get
Set(ByVal value As String)
MyBase.Text = value
End Set
End Property

Private tooltext As String
Private ReadOnly Property ToolTipText() As String
Get
Return tooltext
End Get
End Property
Private Function GetShamsistring(ByVal shamsi As String) As String
'Dim dt As Date = ShamsiTomiladi(shamsi)
'Dim PerC As New System.Globalization.PersianCalendar
Dim sal As String = Microsoft.VisualBasic.Left(shamsi, 4) '(PerC.GetYear(dt))
Dim mah As String = Microsoft.VisualBasic.Mid(shamsi, 6, 2) ' PerC.GetMonth(dt)
Dim rooz As String = Microsoft.VisualBasic.Right(shamsi, 2) 'PerC.GetDayOfMonth(dt)
Dim day As String = ""
Select Case rooz
Case "01"
day = "یکم"
Case "02"
day = "دوم"
Case "03"
day = "سوم"
Case "04"
day = "چهارم"
Case "05"

day = "پنجم"
Case "06"
day = "ششم"
Case "07"
day = "هفتم"
Case "08"
day = "هشتم"
Case "09"
day = "نهم"
Case "10"
day = "دهم"
Case "11"
day = "یازدهم"
Case "12"
day = "دوازدهم"
Case "13"
day = "سیزدهم"
Case "14"
day = "چهاردهم"
Case "15"
day = "پانزدهم"
Case "16"
day = "شانزدهم"
Case "17"
day = "هفدهم"
Case "18"
day = "هچدهم"
Case "19"
day = "نوزدهم"
Case "20"
day = "بیستم"
Case "21"
day = "بیست و یکم"
Case "22"
day = "بیست و دوم"
Case "23"
day = "بیست و سوم"

Case "24"
day = "بیست وچهارم"
Case "25"
day = "بیست و پنچم"
Case "26"
day = "بیست و ششم"
Case "27"
day = "بیست و هفتم"
Case "28"
day = "بیست و هشتم"
Case "29"
day = "بیست و نهم"
Case "30"
day = "سیم"
Case "31"
day = "سی و یکم"
End Select
Dim Month As String = ""
Select Case mah
Case "01"
Month = "فروردین"
Case "02"
Month = "اردیبهشت"
Case "03"
Month = " خرداد ماه"
Case "04"
Month = "تیر ماه"
Case "05"
Month = "مرداد ماه"
Case "06"
Month = " شهریورماه"
Case "07"
Month = "مهرماه"
Case "08"
Month = " آبان ماه"
Case "09"
Month = "آذر ماه"
Case "10"
Month = "دی ماه"
Case "11"
Month = "بهمن"
Case "12"
Month = "اسفند"
End Select
Return String.Format("{0} {1} {2}", day, Month, sal)
End Function
Private Sub ShowToolTip()
ToolTip1.BackColor = Color.LemonChiffon
ToolTip1.ForeColor = Color.FromArgb(&H0, &H33, &HCC)
ToolTip1.UseAnimation = True
Dim pc As New Globalization.PersianCalendar
tooltext = GetShamsistring(Me.Text)
ToolTip1.SetToolTip(Me, ToolTipText)
ToolTip1.Show(ToolTipText, Me, 0, Me.Height)
End Sub
Private Sub HideToolTip()

ToolTip1.Hide(Me)
End Sub
'Private Sub ShowToolTip(ByVal sender As Object, ByVal e As System.EventArgs)
' Dim Ctrl As Control = DirectCast(sender, Control)
' ToolTip1.Show(ToolTip1.GetToolTip(Me), Me, Me.DisplayRectangle.Bottom)
'End Sub
'Private Sub HideToolTip(ByVal sender As Object, ByVal e As System.EventArgs)
' Dim Ctrl As Control = DirectCast(sender, Control)
' ToolTip1.Hide(Ctrl)
'End Sub

Public Overrides Property RightToLeft() As System.Windows.Forms.RightToLeft
Get
Return MyBase.RightToLeft = Windows.Forms.RightToLeft.Yes
End Get
Set(ByVal value As System.Windows.Forms.RightToLeft)
MyBase.RightToLeft = value
End Set
End Property
Protected Overrides Sub OnGotFocus(ByVal e As System.EventArgs)
Me.Select(6, 2)

MyBase.OnGotFocus(e)

End Sub
Protected Overrides Sub OnValidating(ByVal e As System.ComponentModel.CancelEventArgs)
Dim p As New PublicClass
Dim pc As New Globalization.PersianCalendar

If p.IsShamsi(Me.Text) = False Then
errper.SetError(Me, "تاریخ شمسی وارد کنید")
Else
errper.SetError(Me, "")

End If

HideToolTip()

MyBase.OnValidating(e)
End Sub
Protected Overrides Sub OnLostFocus(ByVal e As System.EventArgs)

'Dim p As New PublicClass
'Dim pc As New Globalization.PersianCalendar

'If p.IsShamsi(Me.Text) = False Then
' errper.SetError(Me, "تاریخ صحیح شمسی وارد کنید")
'Else
' errper.SetError(Me, "")

'End If

'HideToolTip()

'MyBase.OnLostFocus(e)
End Sub
Protected Overrides Sub OnKeyUp(ByVal e As System.Windows.Forms.KeyEventArgs)

If e.KeyCode = Keys.Right Then
Select Case Me.SelectionStart
Case 1
Me.Select(0, 2)
Case 3
Me.Select(3, 2)
Case 6
Me.Select(6, 2)

End Select
End If
If e.KeyCode = Keys.Left Then
Select Case Me.SelectionStart
Case 7
Me.Select(3, 2)
Case 4
Me.Select(0, 2)
End Select
End If
If Not e.KeyCode = Keys.Right Then
If Me.SelectionStart = 8 Then
Me.Select(3, 2)
End If
If Me.SelectionStart = 5 Then
Me.Select(0, 2)
End If
End If

ShowToolTip()
MyBase.OnKeyUp(e)

End Sub
Protected Overrides Sub OnMouseHover(ByVal e As System.EventArgs)
ShowToolTip()
MyBase.OnMouseHover(e)
End Sub
Protected Overrides Sub OnMouseLeave(ByVal e As System.EventArgs)
HideToolTip()
MyBase.OnMouseLeave(e)
End Sub


End Class

Wawinfo
سه شنبه 23 مهر 1392, 19:11 عصر
سلام. دوست عزیز کلاسی که نوشتین خیلی عالی و کاربردیه اما 2 تا ایراد داره:
Dim p As New PublicClass
این رو ایراد میگیره و
p.IsShamsi(Me.Text)
و این متد هم وجود خارجی نداره!!
میشخ راهنمایی کنید؟

مهدی د
سه شنبه 23 مهر 1392, 20:03 عصر
سلام. لطفاً در صورت امکان یک نمونه پروژه آپلود کنید.

مهدی د
جمعه 26 مهر 1392, 16:37 عصر
کسی نمی دونه چجوری می شه از این کلاس استفاده کرد؟

مهدی د
سه شنبه 30 مهر 1392, 17:22 عصر
سلام
به دلیل برخی مشکلاتی که کامپوننت تاریخ فارسی داره ، نمی خوام از اون استفاده کنم بجاش می خوام از کدهای این تایپیک استفاده و یک کنترل سفارشی برای تاریخ درست کنم. ولی روشش رو نمی دونم کسی نیست راهنمایی کنه؟

Hossis
سه شنبه 30 مهر 1392, 22:40 عصر
یه نکته دیگه هم هست و اون اینه که masket edit تاریخ ها رو چپه نشون میده یعنی چپ به راست.
اگر تو این کلاس کاری می شد که راست به چپ نشون می داد خیلی عالی می شد