- 題名: カスタムコントロールの作成について
- 日時: 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ならフォーマットする?とか考えてみましたが、検討違い…??
今回もうまく文章をまとめる事ができず、
ちんたらとした質問文で申し訳ありませんがよろしくお願い致します。