TextBoxコントロールを継承し、特定のフォーマットを作成したい
投稿者 ケンケン  (社会人)
投稿日時
2024/11/15 14:08:44
追伸
最大桁数 内部で管理します。
例
整数部が5桁、小数部が3桁です。
最大桁数 内部で管理します。
例
整数部が5桁、小数部が3桁です。
投稿者 (削除されました)  ()
投稿日時
2024/11/15 16:49:18
(削除されました)
投稿者 (削除されました)  ()
投稿日時
2024/11/15 16:53:43
(削除されました)
投稿者 KOZ  (社会人)
投稿日時
2024/11/15 17:01:46
作業依頼ですか?いくらで作業しましょうか?
冗談はさておき
https://gist.github.com/KOZ60/48ba34bd6e0f0e66814e82ec833b2eb7
を継承して以下のようにしてみてください
フォーカスが離れたら、FormatString に指定した書式で整形されます。
もっと凝った仕様が欲しいのであれば、メシウスの InputMan を使ったらどうでしょう?
https://developer.mescius.jp/inputmanplus-winforms
冗談はさておき
https://gist.github.com/KOZ60/48ba34bd6e0f0e66814e82ec833b2eb7
を継承して以下のようにしてみてください
フォーカスが離れたら、FormatString に指定した書式で整形されます。
Imports System.ComponentModel
Public Class NumberText
Inherits RestrictText
Public Property FormatString As String = "#,0.000"
Public Property IntegerLength As Integer = 5 '整数部の桁数
Public Property DecimalLength As Integer = 3 '小数部の桁数
Private Shared ReadOnly allowChars As New HashSet(Of Char)("0123456789.-".ToArray())
Protected Overrides Function IsAllowChar(inputChar As Char) As Boolean
Return allowChars.Contains(inputChar)
End Function
Protected Overrides Function IsValidText(reflectsText As String) As Boolean
If String.IsNullOrEmpty(reflectsText) Then
Return True
End If
Dim dec As Decimal
If Not Decimal.TryParse(reflectsText, dec) Then
Return False
End If
reflectsText = reflectsText.Replace("-", "")
Dim pos As Integer = reflectsText.IndexOf(".")
Dim ilen As Integer
Dim dlen As Integer
If pos = -1 Then
ilen = reflectsText.Length
dlen = 0
Else
ilen = pos
dlen = reflectsText.Length - pos - 1
End If
If ilen > IntegerLength OrElse dlen > DecimalLength Then
Return False
End If
Return MyBase.IsValidText(reflectsText)
End Function
Protected Overrides Function Format(value As String) As String
Dim dec As Decimal
If Decimal.TryParse(value, dec) Then
Return dec.ToString(FormatString)
Else
Return value
End If
End Function
<Browsable(False)>
<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
Public Property Value As Decimal
Get
Dim dec As Decimal
If Decimal.TryParse(Text, dec) Then
Return dec
Else
Return 0
End If
End Get
Set(value As Decimal)
Text = value.ToString(FormatString)
End Set
End Property
End Class
もっと凝った仕様が欲しいのであれば、メシウスの InputMan を使ったらどうでしょう?
https://developer.mescius.jp/inputmanplus-winforms
投稿者 ケンケン  (社会人)
投稿日時
2024/11/18 09:28:53
回答ありがとうございます。
旧名:グレップシティーはライセンス料金が高すぎますね。
多段明細は、MultiRowが便利ですよね。
旧名:グレップシティーはライセンス料金が高すぎますね。
多段明細は、MultiRowが便利ですよね。
投稿者 ケンケン  (社会人)
投稿日時
2024/11/18 10:26:35
解決チェック忘れ
Format(#,##0.00)を定義出来るようにしたい