おはようございます。
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を見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
ボタンをマウスで押し続けたと...
-
フォームの再読み込み
-
VBA CommandButtonの文字ずれ
-
ユーザーフォームに別シートか...
-
ボタンを押すごとに違ったメッ...
-
Excel マクロ 閉じるボタン
-
エクセルVBAでユーザーフォーム...
-
他のアプリケーションとの連携
-
ボタンの増殖
-
ボタンの状態
-
アクセスのフォームで入力日を...
-
リストボックス 何も洗濯され...
-
コマンドボタンやイメージにマ...
-
C♯初心者で、四則演算の電卓を...
-
Excel VBA Application.caller...
-
Excel VBA オプションボタンに...
-
vb.net タイマーに引数を渡す
-
VBで電話プログラム作成
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBA シートのボタン名を変更し...
-
VBA(エクセル)で自動的にボタン...
-
フォームの再読み込み
-
VBA CommandButtonの文字ずれ
-
ユーザーフォームに別シートか...
-
VBAのボタンの位置が変わって困...
-
Access VBA でデータペーストを...
-
Excel VBA Application.caller...
-
セルをマクロのボタンにしたい。
-
コマンドボタンやイメージにマ...
-
ボタン
-
プロシージャからイベントをコ...
-
ボタンをマウスで押し続けたと...
-
VBA でのボタンの移動について
-
C#で動的に作ったtextboxを消す。
-
バックスペース機能の作り方
-
VBAで多数のプログラムを一つの...
-
アイコンとボタンの違い
-
TextBoxでEnterキーを押すと、...
-
VBA IE ダウンロード ダイアロ...
おすすめ情報