- PR -

OnTextChangeのオーバーライド

投稿者投稿内容
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2004-11-25 11:42
TextBoxでOnTextChangeメソッドをオーバーライドして内容のチェックを
行いたいと思っています。

ユーザーコントロールでは何かと不便なので
ユーザーコントロールを作るのではなくてTextBoxクラスのまま
OnTextChangeのオーバーライドをしたいのですが可能でしょうか?

ユーザーコントロールだと
Public Class UserControl1
Inherits System.Windows.Forms.TextBox

" Windows フォーム デザイナで生成されたコード "

Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
If Me.Text = "a" Then
Me.Text = "bb"
End If
MyBase.OnTextChanged(e)

End Sub
End Class

こんな感じで作成した物を普通のテキストボックスの機能としてつけたいのですが
フォームにテキストボックスを貼り付けてもフォームのオーバーライドしかできま
せん。
TextBoxを継承したユーザーコントロールを作るしか方法はないのでしょうか?

Jubei
ぬし
会議室デビュー日: 2002/03/02
投稿数: 830
お住まい・勤務地: 関西
投稿日時: 2004-11-25 12:33
諸農です。

ClassLibraryプロジェクトを作成して、TextBoxクラスを
継承したクラスを作ってビルドすれば、DLL形式のアセン
ブリができあがるので、それをIDEのToolBoxに登録すれば
いいかと思いますが。。


_________________
諸農和岳
Powered by Turbo Delphi & Microsoft Visual Studio 2005

十兵衛@わんくま同盟
http://blogs.wankuma.com/jubei/
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2004-11-25 15:12
はい、継承したクラスだとできるのですが。
できればカスタムコントロールにはしたくなかったのです。
デコレーターパターン?みたいに元のコントロールのまま拡張できればいいかなと

例)
Public Class clsTextBoxHighlightDecorator
Private WithEvents m_txt As TextBox
Public Sub New(ByVal txt As TextBox)
m_txt = txt
End Sub
Private Sub m_txt_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles m_txt.Enter
m_txt.SelectAll()
End Sub
End Class

使う時
Dim aa As clsTextBoxHighlightDecorator = New clsTextBoxHighlightDecorator(TextBox1)

これでEnter時の動作の拡張みたいに使っています

同じように
Public Class testTextbox
Inherits System.Windows.Forms.TextBox
Protected Overrides Sub OnTextChanged(ByVal e As System.EventArgs)
If Me.Text = "a" Then
Me.Text = "bb"
End If
MyBase.OnTextChanged(e)
End Sub
End Class

Public Class decoratortest
Private WithEvents m_txt As testTextbox
Public Sub New(ByVal txt As TextBox)
m_txt = CType(txt, testTextbox)
End Sub
End Class

これだとctype時に"System.InvalidCastException: 指定されたキャストは有効ではありません"となります
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-25 16:26
delegateは試してみました?

_________________
たつごろー
codeseek
こみゅぷらす
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2004-11-25 17:05
ヒントありがとうございます
delegateの使い所がわからず往生しております
なんとか頑張ってみます
たつごろー
ぬし
会議室デビュー日: 2004/10/25
投稿数: 496
投稿日時: 2004-11-25 17:16
VB.NETなら、「AddHandler」をみるといいですよ。

Visual Basic 言語リファレンス
AddHandler ステートメント
イベントをイベント ハンドラに関連付けます。
http://www.microsoft.com/japan/msdn/library/ja/vblr7/html/vastmAddHandlerStatement.asp
_________________
たつごろー
codeseek
こみゅぷらす
めだか
大ベテラン
会議室デビュー日: 2004/11/11
投稿数: 109
投稿日時: 2004-11-25 17:30
ProtectedメソッドのオーバーライドにはHandles句は不要だったと思います。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2004-11-25 17:59
引用:

TextBoxでOnTextChangeメソッドをオーバーライドして内容のチェックを
行いたいと思っています。


本来の目的はオーバーライドすることじゃなくて内容のチェックですよね?
FormにTextBoxを貼り付けてTextChangedイベントあたりでチェックするのは駄目ですか?

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