ali_md110
جمعه 21 تیر 1392, 15: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
ما میتونیم از کلاس 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