- - PR -
拡張コントロール:TextBox.Text.Lengthをカスタマイズする方法
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 ] | ||||
|
投稿日時: 2007-07-03 15:31
TextBox.Text.LengthはTextBoxのプロパティじゃなくてStringのプロパティなので不可能です。
TextBoxにNumericLengthみたいなプロパティを新たに実装するのが普通かと。 | ||||
|
投稿日時: 2007-07-03 15:35
burton999さん、早速のご回答ありがとうございます。
なるほど!Stringのプロパティなのですね。 すごく納得してしまいました。お恥ずかしい限りです。 勉強になりました。ありがとうございました。 | ||||
|
投稿日時: 2007-07-03 16:17
カスタマイズという意味では、TextBoxBase.TextLength プロパティ で行えますが今回のような場合は、
burton999 さんが仰るとおりの方法を取った方が混乱が少ないです。 TextLength プロパティは Text プロパティ (System.String) の Length プロパティと同一である保証がないですし、また virtual メンバなので継承先でカスタマイズする目的で用意されていることが暗に読み取れます。しかしこれは MaskedTextBox のような整形済みの Text を表示するようなコントロールでないと直感的でないと思います。 以上、与太話でした。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-07-03 16:21
凄く勉強になりました。フォローありがとうございますm(__)m | ||||
|
投稿日時: 2007-07-03 16:34
※質問内容のソースにバグがあったので念のため直しました^^;
じゃんぬねっとさん、詳しい情報ありがとうございます。 とても勉強になりました。 そうですよね。仕様書に「TextBoxを継承する」ってあったのでそうしましたが、 MaskedTextBoxを継承したほうが良かったのかもしれません。 MaskedTextBoxはVB時代に少し使ったことがあるぐらいで良くわかってませんが; (VBではMaskEditBoxだったかな?) 試しにMaskedTextBox作ってみようと思います。 本当にありがとうございました。 |
1