- PR -

ユーザーコントロールの作り方

投稿者投稿内容
ポポロン
常連さん
会議室デビュー日: 2003/05/30
投稿数: 26
投稿日時: 2004-06-09 09:57
現在、テキストボックスの拡張版を作成を試みているのですが、
親フォームでユーザーコントロールを使ってもイベントが発生しません。
具体的には、ユーザーコントロールに、
Protected Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged
  TextBox1.Text = "テスト"
End Sub
といった感じで記述しておりますが、実際に実行しても動作しません。
恐らく、何かが足りないのだと思うのですが、何が足りないのかが解らないありさまです。
ヘルプを見ても例が今一なので、参考になりません。
どうか、皆様の知恵をお貸しください。
よろしくお願いします。
みゅう
常連さん
会議室デビュー日: 2004/04/14
投稿数: 49
お住まい・勤務地: 都内某所
投稿日時: 2004-06-09 10:40
引用:

ポポロンさんの書き込み (2004-06-09 09:57) より:
親フォームでユーザーコントロールを使ってもイベントが発生しません。


こんにちわ、みゅうです。
これは多分、継承元が Inherits System.Windows.Forms.UserControl に
なっているからだと思われます。そうなっていませんか?
そうなると、今そのユーザコントロールのTextChangedイベントは下地(?)の System.Windows.Forms.UserControlクラスのイベントであって、その上に貼ってあるSystem.Windows.Forms.TextBoxクラスのイベントではないのです。
なので、いくらウワモノのテキストボックスをどうこうしてもイベントは起こらないのです。
解決方法は2つ程。
@ 今見えているイベントはSystem.Windows.Forms.UserControlのイベントだと認識し、ユーザコントロール内で値の受け渡し、イベントの連動など記述してあげる。
A 継承元をSystem.Windows.Forms.TextBoxにする。この場合はベースがテキストボックスですから元々のイベント・メソッド・プロパティ等はそろっています。後は追加機能を記述すれば拡張テキストボックスの出来上がりです。
@はどちらかといえばテキストボックスの機能を持ったユーザコントロールって感じで、Aこそ本当の拡張テキストボックスですよね?^^
こんな感じでどうでしょうか?
ポポロン
常連さん
会議室デビュー日: 2003/05/30
投稿数: 26
投稿日時: 2004-06-09 11:00
みゅうさん、ご返信ありがとうございます。
記述し忘れていましたが、
Inherits で System.Windows.Forms.TextBox と変更しているのです。
ですが、イベントが発生しないのです。
質問に対して記入漏れがあった事をお詫びします。
では、よろしくお願いします。
Hasumi
ベテラン
会議室デビュー日: 2002/07/23
投稿数: 78
お住まい・勤務地: 神奈川・東京
投稿日時: 2004-06-09 11:26
Hasumiです。

OnTextChangedメソッドをオーバーライドしていませんか?
基本クラスのOnTabIndexChangedメソッドを呼び出しているか
確認してみてください。
コード:
Protected Overrides Sub OnTextChanged(e As System.EventArgs)
  独自処理
    :
  MyBase.OnTextChanged(e)
End Sub

みゅう
常連さん
会議室デビュー日: 2004/04/14
投稿数: 49
お住まい・勤務地: 都内某所
投稿日時: 2004-06-09 11:32
引用:

ポポロンさんの書き込み (2004-06-09 11:00) より:
Inherits で System.Windows.Forms.TextBox と変更しているのです。
ですが、イベントが発生しないのです。


そうでしたか・・・
だとするならば、かなり難解ですね。
私のところでは再現せず、普通にイベント発生してますね。
後は経験からの推測の返答になりますが、もしかしたらユーザコントロール内でTextChangedイベントやOnTextChangedなどで記述してませんか?
だとした場合、処理の動きは ユーザコントロール内 → 親フォーム の順番なので処理の内容・タイミングによってはうまくイベントを拾えなくなる時がありました。
OnTextChangedの場合特に、処理を記述した後に自メソッドを呼び出さないとちゃんと動かなかったように覚えてます。(私はOnPaintでしたが。。。)
上記のような辺りで無ければ、もうわかりませんね・・・
ポポロン
常連さん
会議室デビュー日: 2003/05/30
投稿数: 26
投稿日時: 2004-06-09 11:54
Hasumiさん、みゅうさん、どうもです。
お二人とも、OnTextChangedメソッドに関して触れられていますが、
ユーザーコントロール内のTextBoxをダブルクリックして、
自動生成されたイベント内で処理を記述しました。
当然、自動生成ではPrivateになるので、Protectedと記述しなおした訳です。
ですが、この方法ではイベントを取得できないっぽいですね。
やはり、独自のイベントを作らないと駄目なのでしょうか?
みゅう
常連さん
会議室デビュー日: 2004/04/14
投稿数: 49
お住まい・勤務地: 都内某所
投稿日時: 2004-06-09 12:44
引用:

ポポロンさんの書き込み (2004-06-09 11:54) より:
ユーザーコントロール内のTextBoxをダブルクリックして、
自動生成されたイベント内で処理を記述しました。
やはり、独自のイベントを作らないと駄目なのでしょうか?


みゅうです。
そのユーザコントロール内の記述はOnTextChangedメソッドでの記述では駄目なのでしょうか?
やはりTextChangedイベント内に記述しないと不都合があるのでしょうか?
特に今回の場合、RaiseEventをしなくても出来ます。
ポポロン
常連さん
会議室デビュー日: 2003/05/30
投稿数: 26
投稿日時: 2004-06-09 12:53
みゅうさん、何度も返信していただきありがとうございます。
で、そのOnTextChangedメソッドは具体的に、どのように記述したらいいのでしょうか?
OnTextChangedメソッドを独自で作成して、Eventを追加する…といった感じでしょうか?
よろしくお願いします。

[ メッセージ編集済み 編集者: ポポロン 編集日時 2004-06-09 13:26 ]

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