VB2005で独自の制限を持つコントロールを作ろうと思っています。
Imports System.ComponentModel
Public Class Component1
Inherits TextBox
Private _text As Double
Public Overrides Property Text() As String
Get
Return _text
End Get
Set(ByVal value As String)
If IsNumeric(value) Then
_text = value
End If
End Set
End Property
End Class
やりたい事は数値しか入力を許さず、一定のプロパティ指定によって
カンマ区切りだとか小数部表示、桁数制限などが出来るようにしたい
のです。
上記のようなコードで動作は出来るようなのですが、デザイナ上の
プロパティウィンドウからTextを変更した時、デザイナ上に貼り付け
られているテキストボックスの中に、指定されたTextが表示されません。
MyBase.Textを利用するとText()が何度も走行してしまうようですし、
取得するときに、Textプロパティに設定されている値を加工した結果を
返したい為、MyBase.Textの利用が宜しくないようです。
(例えば表示上は「1,234」となっているが、取得時には「1234」として
取得される、
設定時に「1234」と指定したが、実際に設定される値は「1,234」など)
先のような理由の為か、Getの方に
Return String.Format("{0:#,##0}", Single.Parse(MyBase.Text))
のようなことをするとInvalidOperationExceptionが発生してしまいます。
どうするとデザイナ上にも値が表示され、先のようなカスタム処理を加えることが可能でしょうか?
宜しくお願い致します。
No.1ベストアンサー
- 回答日時:
カンマ表示用のプロパティを準備して以下のようにしてみてはいかがでしょう
Private _bKanma as boolean
Public Property TextKanma as boolean
Get
return _bKanma
End Get
Set ( byVal value as boolean )
if _bKanma <> value then
myBase.Text = Text
end if
_bKanma = value
End Set
End Property
Public Overrides Property Text() as String
Get
if _bKanma then
dim tmp as Double
if Double.TryParse( MyBase.Text, tmp ) then
return tmp.ToStrign( "#,##0")
end if
end if
return MyBase.Text
End Get
Set ( byVal value as String)
if _bKanma then
value = value.Replase(",","")
end if
dim tmp as Double
if Double.TryPause( value, tmp ) then
if _bKanma then
MyBase.Text = tmp.ToString("#,##0")
else
MyBase.Text = tmp
end if
else
' MsgBox( "数値以外の文字は受け取れません" )
MyBase.Text = ""
end if
end Set
End Property
といった具合で ・・・
この回答への補足
ご回答ありがとうございます。
ご提示頂いた方法で出来ました。
なぜにこれで出来るのかが不明ですが・・・。
併せてフォーカスがあたった時にカンマなし、フォーカスが離れたときに
カンマあり、ということを行いたく、ご提示頂いたコードの所々を
マネてOnGotFocus()、OnLostFocus()を実装してみましたが、
どうも上手く動作してくれません。
処理的には走っているようなのですが、何も起こらないというような感じです。
OnGotFocus()について特記すると、OnGotFucos()へきた時点で既に
なぜかカンマがなくなっています。
そしてカンマがなくなっているのに、表示上はカンマがついたままという
状態です。
実装は以下のようにしてみました。
Text()のSetだけ、上書きされないよう一応変えました。
Public Overrides Property Text() As String
Get
If _bKanma Then
Dim tmp As Double
If Double.TryParse(MyBase.Text, tmp) Then
Return tmp.ToString("###0")
End If
End If
Return MyBase.Text
End Get
Set(ByVal value As String)
MyBase.Text = value
End Set
End Property
Protected Overrides Sub OnGotFocus(ByVal e As System.EventArgs)
MyBase.OnGotFocus(e)
If _bKanma Then
Dim tmp As Double
If Double.TryParse(MyBase.Text, tmp) Then
MyBase.Text = tmp.ToString("###0")
End If
End If
End Sub
MyBase.Textと言っているわりに上書きした自身のTextが走ったり、
取得処理なんて書いていないのにText()のGetが走ったり、
上手い実装が全く出来ません・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA 重複チェック後に値をワークシートに転記する方法を教えてください。 1 2023/03/19 12:43
- Visual Basic(VBA) ユーザーフォームの書き出しで追加のご相談 ユーザーフォームの値をシートに書き出す際、コードが表示され 2 2022/08/05 10:58
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Excel(エクセル) マクロでテキストファイルを読み込んだ際の最終セルにデータと改行が含まれる問題の改善方法 2 2022/03/25 16:50
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) VBA 参照先で選んだファイルをコピーし、出力先に別名で保存したい 8 2022/05/13 20:37
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【ExcelVBA】値を変更しながら...
-
VBAで大量のファイルをシート名...
-
VBA 何かしら文字が入っていたら
-
【マクロ】1つのマクロの中に...
-
VBA 別ブックからコピペしたい...
-
VBAを使用した時間管理
-
Excelのマクロでワードのテキス...
-
【PowerPoint VBA】緑色の文字...
-
ExcelのVBAコードについて教え...
-
2つのマクロでチェックボックス...
-
VB.net(VB)で、フォームにExcel...
-
FileCopy時のエラー
-
VBA ユーザーフォーム ボタンク...
-
エクセルについて
-
Vba SelStart、SelLen教えてく...
-
VBAで各列の"+"と"o"の合計数を...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
Excel VBA 定義されたプロージ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel VBA 定義されたプロージ...
-
Excel-VBAのmsgBox()の不思議
-
【VBA】マクロの入ったファイル...
-
VBA 複数条件の分岐処理の上手...
-
現在のブックを閉じないで、マ...
-
VBAで各列の"+"と"o"の合計数を...
-
VBAに詳しい方教えてください。
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ユーザーフォームに別シートか...
-
エクセルのマクロについて教え...
-
ExcelVBA シート名を複数セルか...
-
エクセルのマクロについて教え...
-
VBA listBoxから
-
Excelのマクロについて教えてく...
-
エクセルのマクロについて教え...
おすすめ情報