- 題名: カスタムコントロールの作成について
- 日時: 2006/08/02 18:53:43
- ID: 16933
- この記事の返信元:
- (なし)
- この記事への返信:
- [16935] Re[1]: カスタムコントロールの作成について2006/08/02 19:28:56
- [16948] Re[1]: カスタムコントロールの作成について2006/08/03 10:27:57
- ツリーを表示
こんなのはいかがでしょう?
フォーカスを持ってるとき、不細工ですが終電なので^^;
-----
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim tmpText As TextBoxEx = New TextBoxEx
tmpText.Parent = Me
tmpText.Location = New Point(100, 50)
End Sub
End Class
Public Class TextBoxEx
Inherits System.Windows.Forms.TextBox
Public Sub New()
Me.SetStyle(ControlStyles.UserPaint, True)
End Sub
Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
MyBase.OnPaint(e)
If Not Me.Focused And IsNumeric(Me.Text) Then
e.Graphics.DrawString(Format(CInt(Me.Text), "###,###"), Me.Font, Brushes.Black, 0, 0)
Else
e.Graphics.DrawString(Me.Text, Me.Font, Brushes.Black, 0, 0)
End If
End Sub
End Class
分類:[.NET]
【解決したい問題】
お世話になります。
現在勉強と一部仕事を兼ねてTextBoxを継承したカスタムコントロールの作成に初挑戦しています。
# まずは、試験的にIsNumeric(数値(金額))用に拡張中です。
挑戦するにあたってWEB検索などで多少ですが情報収集をしたところ
Key〜やTextChangedで入力チェックをしている物が多い(?)ようでした。
入力中の段階で常にチェックをかけてはじくという事なのかな…と。
自分の場合は、入力は自由にさせて最後にOnValidatingで
・入力エラー(IsNumericがFalse)ならe.Cancel = True
・エラーでなければ"#,##0"でフォーマット
といった具合で進めています。
# 一般的に見て仕様としてどうなのかは疑問(自信なし)ですが。とりあえず試験的に…
で、ようやく本題(質問)に入りますが
上記だとテキストボックス(MyTextBox)がフォーカスを取得して検証イベントが
発生しないと入力制限やフォーマットがかからないと思いますが、
たとえばデータ修正フォームなどで修正データの値が直接Textプロパティに
セットされた場合にも同様の処理を行うのにはどうすればいいのでしょうか?
# MyTextBox1.Text = "10000" とされた場合も "10,000" にするイメージなんですが。
【解決するために何をしたか】
その場の思い付きだけで
Textプロパティを Shadows とか Overrides してIsNumeric(Value)が
Trueならフォーマットする?とか考えてみましたが、検討違い…??
今回もうまく文章をまとめる事ができず、
ちんたらとした質問文で申し訳ありませんがよろしくお願い致します。