おはようございます。
VB5.0を1週間ほどかじって現在2005に乗り換えたばかりのド初心者です。
(用語の使い方などが間違っているかもしれません。おかしなところは指摘していただけるとありがたいです)
実行時に動的(?)に作成されたComboBoxをイベントハンドラへ関連付けようとしているのですが、ClickやLeaveなどで関連づけると正常に動作するのにTextChangedの場合になぜか認識してもらえません。
原因の見当がまったくつかず、困り果てています。
内容は、まずボタンを押すとコンボボックスが2つずつ追加されます。そのコンボボックスのリストを選ぶ際、追加されたふたつが同じものを選んでいると色が変わるようにするものです。
下にそのソースを簡潔にしたサンプルを記述させていただきます。
間違いの指摘や、うまくいかない原因、アドバイスなど頂ければ幸いです。
(formにはButton1というボタンが一つだけあります。)
Dim Index As Integer
Private CBox1() As ComboBox
Private CBox2() As ComboBox
Private Sub CBB_LT_SameErroCheck(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim T As Integer
T = sender.Tag
If CBox1(T).Text = "" Then
Exit Sub
End If
If CBox1(T).Text = CBox2(T).Text Then
CBox1(T).BackColor = Color.Red
CBox2(T).BackColor = Color.Red
Else
CBox1(T).BackColor = Color.White
CBox2(T).BackColor = Color.White
End If
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
ReDim Preserve CBox1(Index)
ReDim Preserve CBox2(Index)
SuspendLayout()
CBox1(Index) = New ComboBox
CBox2(Index) = New ComboBox
With CBox1(Index)
.Location = New Point(105, Index * 20)
.Size = New Size(95, 20)
.DropDownStyle = ComboBoxStyle.DropDownList
.Tag = Index
.Items.Add("List1")
.Items.Add("List2")
End With
With CBox2(Index)
.Location = New Point(200, Index * 20)
.Size = New Size(95, 20)
.DropDownStyle = ComboBoxStyle.DropDownList
.Tag = Index
.Items.Add("List1")
.Items.Add("List2")
End With
'AddHandler CBox1(Index).Click, AddressOf CBB_LT_SameErroCheck
'AddHandler CBox2(Index).Click, AddressOf CBB_LT_SameErroCheck
AddHandler CBox1(Index).TextChanged, AddressOf CBB_LT_SameErroCheck
AddHandler CBox2(Index).TextChanged, AddressOf CBB_LT_SameErroCheck
Me.Controls.Add(CBox1(Index))
Me.Controls.Add(CBox2(Index))
ResumeLayout(False)
Index += 1
End Sub
No.1ベストアンサー
- 回答日時:
まずは関係ない話から。
Option Strict Onの時,
>T = sender.Tag
(T:Integer,sender:Object,ObjectはTagプロパティを持たないから駄目だろと怒られた。
そのため、当方環境での検証において
該当部分を
T = DirectCast((DirectCast(sender, ComboBox)).Tag, Integer)
と置き換えた。なお,System.Windows.Forms名前空間が読み込まれていない場合,System.Windows.Forms.ComboBoxと記述する必要がある。
======
まだ読んでいる途中です。
ComboBoxStyle.DropDownListの場合,TextChangedは発生しないんだとか何とか。ComboBoxStyle.DropDownの場合,当方環境で発生が確認できた。
変わりにSelectedIndexChangedやSelectedValueChangedを使えとさ。
http://forums.microsoft.com/MSDN/ShowPost.aspx?P …
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.ph …
お早いご返信ありがとうございます。
仰るとおり、SelectedValueChangedを使ったところ思い通りの動作をしてくれました!助かりました!
しかし解せないのが、ComboBoxStyle.DropDownListをデザイン時に配置しデザイン時にTextChangedイベントハンドラへ関連付けした場合と、デザイン時に配置したものを実行時にイベントハンドラへ関連付けした場合は何故か上手く動いたんです。
コントロールを実行時に動的に追加した場合のみこのような事になってしまったので余計に悩んでしまっておりました。
いくつか上げていただいた参考記事(英語は読めませんでした・・・)に似たような事が書いてありましたが、バグなんでしょうか。
何はともあれ、解決法を導いてくださった事、感謝いたします。
ありがとうございます。
No.3
- 回答日時:
>しかし解せないのが、(中略)デザイン時に配置したものを実行時にイベントハンドラへ関連付けした場合は何故か上手く動いたんです
再現しました。なんじゃこりゃ!?
解決策にいたらず申し訳ないですが,一応再現報告はしておきます。
俺自身も更なる識者の回答を待ちたいと思います
>解決策にいたらず申し訳ないですが,
とんでもないです。
ご教授いただいた方法でプログラム自体は正常に動かすことができるようになり、現在は順調に作業が進められています。
その上、再現をし確認までしてくださった事、とても感謝しております。
今回の件の根本的な原因について、何かご存知の方がいらっしゃるかもしれませんので、しばらくこの質問は締め切らずに置いてみようかと思います。
お互い有益な情報が得られることを祈って、しばし待ちましょう。
ご返信ありがとうございました。
No.2
- 回答日時:
二つ追記。
●当方の環境では
Forumで述べられている「マウスによる操作」によっても
TextChangedイベントは発生していませんでした。
●CBB_LT_SameErrorCheckでなく
CBB_LT_SameErroCheckなのは
意図的ですか?
ご指摘ありがとうございます。
CBB_LT_SameErrorCheckが正しく、「r」が抜けているのは私のタイプミスでした。
幸い、今回はこれに起因する問題は発生しなかったようですが、タイプミスなどの単純な誤りが問題になってしまう場面もあるかと思います。
今後はもっと気をつけるよう心がけます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) ExcelVBAで、index、match関数を使用して、指定範囲に出力したい 3 2022/10/18 21:53
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) Vbaで数式をポーランド記法に変換するコードを作って実行しようとするとフリーズします。 1 2022/05/24 17:53
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
VBA CommandButtonの文字ずれ
-
セルをマクロのボタンにしたい。
-
フォームの再読み込み
-
VB.net でトグルボタンを実現し...
-
VBAのボタンの位置が変わって困...
-
TextBoxでEnterキーを押すと、...
-
フォームから別のフォームを呼...
-
閉じると「+」になり開くと「-...
-
プロシージャからイベントをコ...
-
[Excel VBA]コマンドボタンの入...
-
Edge操作のアプリが例外発生に
-
[VB.net] ボタン(Flat)のEnable...
-
+ボタンの名称は?
-
アイコンとボタンの違い
-
テラパッドを使ってるんですが...
-
VB.NETでマウスクリックイベン...
-
リストボックス 何も洗濯され...
-
Excel VBA Application.caller...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ユーザーフォームに別シートか...
-
VBA CommandButtonの文字ずれ
-
フォームの再読み込み
-
コマンドボタンやイメージにマ...
-
Excel VBA Application.caller...
-
アイコンとボタンの違い
-
ボタンをマウスで押し続けたと...
-
閉じると「+」になり開くと「-...
-
セルをマクロのボタンにしたい。
-
VBA マクロでの網掛けについて
-
VB.net でトグルボタンを実現し...
-
VBAのボタンの位置が変わって困...
-
Access VBA でデータペーストを...
-
VBAで多数のプログラムを一つの...
-
プロシージャからイベントをコ...
-
VBA でのボタンの移動について
-
VBAでオプションボタンによって...
-
[Excel VBA]コマンドボタンの入...
おすすめ情報