- - PR -
[vb.net]TextBox + Combobox で DataGridViewComboBoxColumn.DataPropertyName と同様な機能を実装したい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-12-03 21:08
お世話になります。
参照先URLの方でも質問させていただいておりますが、もう1件質問です。 [OS] WindowsXP [言語] VB 2005 sp1 にて開発しております。 DataGridViewComboBoxColumn.DataPropertyName と同様な機能を、 TextBox + ComboBox で実現したいと思っています。 そこで、System.Windows.Forms.ComboBox を継承したクラスを作成したのですが、 どうにも利用しているイベントがよくないような気がしておりまして、 アドバイスをいただきたいのです。 作成したクラスに、プロパティ "DataPropertyName As String" を作成し、 以下のようなイベントを追加しました。 Private Sub LinkageComboBox_Enter(引数略) Handles Me.Enter Private Sub LinkageComboBox_Validated(引数略) Handles Me.Validated やっていることは、"DataPropertyName" を元に、 Enterイベント で TextBox の入力結果を ComboBox に反映することと、 Validated で ComboBox の選択結果を TextBox に反映することです。 ここでこのイベントで使用している Me.Enter と Me.Validated についてなのですが、 このイベントをこのまま使用して何か問題は発生しないでしょうか? ComboBoxクラスには、OnEnter メソッドや OnValidated メソッドが存在します。 当初、OnEnter と OnValidated によるイベントを作成したのですが、 OnValidated のイベントがうまく動かず(イベントが発生しない AddHandlerが必要?)、 最終的に上記のように作りました。 AddHandler が必要なのかと考えましたが、OnEnter は無くても動きましたので、 AddHandler Me.Validated, AddressOf ・・・ とだけ追加しても、 Enter のほうと釣り合いが取れないのでおかしいのかな、などと考えています。 「馬鹿の考え休むに似たり」といった状態です。 これじゃダメだとか、こうしたほうがいいといったアドバイスをいただけたらと思います。 よろしくお願いいたします。 | ||||
|
投稿日時: 2007-12-04 03:04
OnEnter と OnValidated... によるイベント? どのように記述しているのでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-12-04 11:45
じゃんぬねっとさんご返信ありがとうございます。
OnEnter と OnValided で書いたソース消してしまっていました。 比較できなければ検討もできないですよね>< 再現するべくやってみましたが、なんだかうまくいきません(^^; 我ながらどうコーディングしたんだろう… それに、改めて指摘されますと On*** でイベントを処理しようとするのはおかしな話ですよね。 イベントを呼び出すのが仕事ですもんね。 イベントそのものではない、と。
を見て(読んででなく(^^;)、 「派生クラスで Enter の処理をするときは、OnEnter を使うといいのか」 くらいに判断したのだと思います。 かなりグダグダになってしまいましたが、改めて質問させてください。 タイトルのような機能を実装するとき、 派生クラス内で、Me.*** イベントを処理するのは一般的な手法でしょうか? 申し訳ありませんが、再度よろしくお願いいたします。 #ほんと落ち着き無いなあ、自分 | ||||
|
投稿日時: 2007-12-04 16:25
この意味がよくわかりません。 DataGridViewComboBoxColumn ではデータ入力ができないから、ComboBoxColumn を自作したいということでしょうか? _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog | ||||
|
投稿日時: 2007-12-04 17:09
これは Handles 句のことでしょうか? Raise する時のお話でしょうか? イベントを処理と書かれていますので実装部分のお話に聞こえます。 イベント プロシージャではなくOn メソッドでやるべきとかそういうことでしょうか? _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-12-04 17:12
R・田中一郎さん、ご返信ありがとうございます。
私が何をやりたいのかわからない、ということですよね。
DataGridView は直接は関係ありません。 上記のような機能が、DataGridViewComboBoxColumn には標準で用意されているので、 同じことをしたいです。 TextBox + ComboBox の組み合わせが出てくるたびに、 イベント捉まえてコーディングすると手間になるし、間違うので、 派生クラスを作ってしまおう、と。 で、その派生クラスで Me.*** でイベントを捉まえて処理するときに、 注意事項等はないだろうか? アドバイスがいただきたいな。 と思い、質問させていただきました。 いかがでしょうか? よろしくお願いします。 [ メッセージ編集済み 編集者: とある根性なし 編集日時 2007-12-04 17:15 ] | ||||
|
投稿日時: 2007-12-04 17:28
じゃんぬねっとさん、たびたびありがとうございます。
話をするとき、いつも結論が最後になって何が言いたいのかわからん、といわれます
「Handles Me.*** を処理するのは一般的でしょうか?」です。 プラス、「イベント プロシージャではなくOn メソッドでやるべき」であるかどうか、On メソッドでやるならどうやってやるのかを知りたいです。 [Handles Me.***] を処理するとき(今回の場合は Enter and Valited)に、 たとえば MyBase.Enter に処理をやらせるべき場合があるとか、 そういったことをアドバイスしていただけたらな、と思っています。 何か自分がとても間抜けで考えが足りないような気がしてきました・・・ (おかしなこと言ってたら、是非教えてください。) よろしくお願いいたします。 # ソースのっけてレビューしてもらったほうが早いですかね [ メッセージ編集済み 編集者: とある根性なし 編集日時 2007-12-04 17:37 ] | ||||
|
投稿日時: 2007-12-04 19:36
ComboBox を継承しているなら、普通に、OnなにがしをOverrideすればいいんじゃないでしょうか? ComboBox を継承したクラスで TextBox をどうやって実装しているのかは不明ですが。 _________________ R・田中一郎 - R.Tanaka.Ichiro’s Blog |