TextBox na měnu
Přidáno: 10.9.2007
Kategorie: VB.NET - Komponenty
Autor: Tomáš Herceg
Občas je třeba v aplikacích zadávat měnu a umožnit ji uživatelům nějak pohodlně editovat.
Pokud si do projektu přidáte novou třídu a vložíte do ní tento kód, dostanete jednoduchou komponentu CurrencyTextBox. Nejde o nic jiného než o vylepšený TextBox. Hodnota je zarovnána doprava a místo samotné nuly se v něm zobrazí 0,0 Kč. V okamžiku, kdy chceme hodnotu upravit, se v textovém poli objeví pouze samotné číslo zarovnané vlevo. Jakmile editaci ukončíme, nová hodnota se opět zobrazí jako měna.
Pro zjištění číselné hodnoty máme přidanou vlastnost Value.
Jediný zádrhel je na událostech GotFocus a LostFocus, při změně zarovnání či textu se začnou volat cyklicky znovu a znovu, což je třeba ošetřit pomocí proměnné.
Public Class CurrencyTextBox
Inherits TextBox
Sub New()
MyBase.New()
Me.TextAlign = HorizontalAlignment.Right
Me.Text = _Value.ToString("c")
End Sub
Private _Value As Decimal
Public Property Value() As Decimal
Get
Return _Value
End Get
Set(ByVal value As Decimal)
_Value = value
Me.Text = _Value.ToString("c")
End Set
End Property
Private IgnoreGetLostFocus As Boolean = False
Protected Overrides Sub OnGotFocus(ByVal e As System.EventArgs)
If IgnoreGetLostFocus Then Exit Sub
IgnoreGetLostFocus = True
Me.Text = _Value
Me.TextAlign = HorizontalAlignment.Left
IgnoreGetLostFocus = False
MyBase.OnGotFocus(e)
End Sub
Protected Overrides Sub OnLostFocus(ByVal e As System.EventArgs)
If IgnoreGetLostFocus Then Exit Sub
IgnoreGetLostFocus = True
If Not Decimal.TryParse(Me.Text, _Value) Then Beep()
Me.Text = _Value.ToString("c")
Me.TextAlign = HorizontalAlignment.Right
IgnoreGetLostFocus = False
MyBase.OnLostFocus(e)
End Sub
End Class