- PR -

拡張コントロール:TextBox.Text.Lengthをカスタマイズする方法

1
投稿者投稿内容
reiko
ベテラン
会議室デビュー日: 2004/11/19
投稿数: 84
投稿日時: 2007-07-03 15:20
度々お世話になります。
http://msdn2.microsoft.com/ja-jp/library/w2a8y03d(VS.80).aspx

の作成方法を用いて、コントロールを自作しています。

上記URLで継承しているのはButtonですが、私が継承したのはTextBoxです。
作っているコントロールは数値入力用テキストボックスです。

そこで質問になるのですが、TextプロパティのLengthをGETする際、
"-"マイナス文字と、"."小数点文字と、","カンマを除いた数値のみの桁数を
取得できるようにしたいのですが、
Text.Length ってオーバーライド(?)出来ないのでしょうか・・・。

検索してみたのですが、思うようなサイトを見つけることが出来ず、
自分自身でも色々な書き方を試してみたのですがエラーになってしまいました。

試しに作ってみたソースは以下の通りです。
==================================================
Public Overrides Property Text() As String
Get
Dim sLenStr As String = MyBase.Text

Dim sLenStr As String = Me.Text

sLenStr = Replace(sLenStr, ",", "")
sLenStr = Replace(sLenStr, "-", "")
sLenStr = Replace(sLenStr, ".", "")

MyBase.Text.Length = sLenStr.Length(★)

Return MyBase.Text
End Get
Set(ByVal value As String)
MyBase.Text = value
End Set
End Property
==================================================
(★)の部分でプロパティ'Length'は'ReadOnly'です
となってしまいました;

このような場合、上記の桁数を取得するようなプロパティを自作するしか方法がないのでしょうか?
もしかしたらオブジェクト指向の基本的なところがわかってないせいで、かなり間抜けな質問をしているかもしれません・・・。
大変恐縮ですが、何卒ご教授お願い致します。



[ メッセージ編集済み 編集者: reiko 編集日時 2007-07-03 16:26 ]
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-07-03 15:31
TextBox.Text.LengthはTextBoxのプロパティじゃなくてStringのプロパティなので不可能です。
TextBoxにNumericLengthみたいなプロパティを新たに実装するのが普通かと。
reiko
ベテラン
会議室デビュー日: 2004/11/19
投稿数: 84
投稿日時: 2007-07-03 15:35
burton999さん、早速のご回答ありがとうございます。
なるほど!Stringのプロパティなのですね。
すごく納得してしまいました。お恥ずかしい限りです。
勉強になりました。ありがとうございました。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2007-07-03 16:17
カスタマイズという意味では、TextBoxBase.TextLength プロパティ で行えますが今回のような場合は、

引用:

burton999さんの書き込み (2007-07-03 15:31) より:

TextBoxにNumericLengthみたいなプロパティを新たに実装するのが普通かと。


burton999 さんが仰るとおりの方法を取った方が混乱が少ないです。

TextLength プロパティは Text プロパティ (System.String) の Length プロパティと同一である保証がないですし、また virtual メンバなので継承先でカスタマイズする目的で用意されていることが暗に読み取れます。しかしこれは MaskedTextBox のような整形済みの Text を表示するようなコントロールでないと直感的でないと思います。

以上、与太話でした。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
burton999
ぬし
会議室デビュー日: 2003/10/06
投稿数: 898
お住まい・勤務地: 東京
投稿日時: 2007-07-03 16:21
引用:

じゃんぬねっとさんの書き込み (2007-07-03 16:17) より:

TextLength プロパティは Text プロパティ (System.String) の Length プロパティと同一である保証がないですし、また virtual メンバなので継承先でカスタマイズする目的で用意されていることが暗に読み取れます。しかしこれは MaskedTextBox のような整形済みの Text を表示するようなコントロールでないと直感的でないと思います。

以上、与太話でした。



凄く勉強になりました。フォローありがとうございますm(__)m
reiko
ベテラン
会議室デビュー日: 2004/11/19
投稿数: 84
投稿日時: 2007-07-03 16:34
※質問内容のソースにバグがあったので念のため直しました^^;

じゃんぬねっとさん、詳しい情報ありがとうございます。
とても勉強になりました。

そうですよね。仕様書に「TextBoxを継承する」ってあったのでそうしましたが、
MaskedTextBoxを継承したほうが良かったのかもしれません。
MaskedTextBoxはVB時代に少し使ったことがあるぐらいで良くわかってませんが;
(VBではMaskEditBoxだったかな?)

試しにMaskedTextBox作ってみようと思います。
本当にありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)