Combo1.AddItem "AAA"
Combo1.AddItem "BBB"
Combo1.AddItem "CCC"

のようなコンボボックスがあり、プログラムの途中で

Combo1.Text = "AAA"
または
Combo1.ListIndex = 0

としたときに、どちらの方法でもClickイベントが発生します。
このClickイベントを発生させないようにしたいのですが
何かよい方法はありますか?
あれば教えてください。よろしくお願いします。

A 回答 (1件)

こんにちは。



Publicのフラグを立てるのが一番簡単だと思います。

Public bClickFlg as Boolean ''Trueの時はクリックイベントに入らない。コンボボックス用フラグ

と設定しておき、

bClickFlg = True
Combo1.Text = "AAA"
bClickFlg = False

んで、Clickイベントには、

IF bClickFlg = True then Exit Sub

として、Trueの時はすぐに外に出るようにしてしまう。

Clickイベント自体を発生させないことは出来ないので、
こうするのがてっとり早いかと思います。

それと、Combo1.Text = "AAA" でClickイベント走りますか?
Chageイベントだとしても、同様にすれば大丈夫です。

Publicの変数は、他の人が見てわかるように、
きちんとコメントをつけて、特定のモジュールで宣言にするようにしましょうね^^

見当違いでしたらすいません。
それでは、また。
    • good
    • 0
この回答へのお礼

こんばんは。
試してみたらちゃんと動きました。
ありがとうございました。

Combo1.Text = "AAA" でClickイベント走ってますよ。
その代わりChangeイベントは発生してないです。
Styleプロパティがドロップダウンリストボックスだからでしょうか。
まぁ、ちゃんと動いたからいいっか。
ということで本当にありがとうございました。

お礼日時:2002/03/12 18:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q(VBA)チェックボックスのclickのイベントが、プログラムからの操作でも反応してしまいます。

エクセルのマクロを作成中なのですが、
チェックボックスのTrue/Falseを他のプロシージャから直接変更すると、
clickのイベントに設定してあるはずのプロシージャが反応してしまいます。
本来、そういった操作で反応するのはchangeのイベントだと認識しているため、
意図しない挙動になってしまって困っています。何が原因でしょうか?
エクセルのバージョンは2013、VBAのバージョンは7.1です。

以下ソース
(ユーザーフォームにテキストボックス「TextBox」とチェックボックス「CheckBox」を配置)
テキストボックスに何かを入力するとチェックボックスをTrueにしますが、
そうするとCheckBox_Clickでないと表示されないはずのメッセージボックスが出てしまいます。

Private Sub TextBox_Change()
Me.CheckBox = True
End Sub

Private Sub CheckBox_Click()
MsgBox "test"
End Sub

エクセルのマクロを作成中なのですが、
チェックボックスのTrue/Falseを他のプロシージャから直接変更すると、
clickのイベントに設定してあるはずのプロシージャが反応してしまいます。
本来、そういった操作で反応するのはchangeのイベントだと認識しているため、
意図しない挙動になってしまって困っています。何が原因でしょうか?
エクセルのバージョンは2013、VBAのバージョンは7.1です。

以下ソース
(ユーザーフォームにテキストボックス「TextBox」とチェックボックス「CheckBox」を配置...続きを読む

Aベストアンサー

こんばんは。

>他のプロシージャから直接変更すると、
このように、ActiveControl で、回避すればよいと思います。
If ActiveControl.Name = CheckBox1.Name Then

なお、私なら、このようにしていると思います。TextBox が空なら、CheckBox もオフになるということです。意味が違っていたら、ご指摘ください。

Private Sub TextBox_Change()
 If Me.TextBox.Text <> "" Then
  Me.CheckBox.Value = 1
 Else
  Me.CheckBox.Value = 0
 End If
End Sub
Private Sub CheckBox_Click()
 '直接処理しないと、MsgBox は働かない。
 If ActiveControl.Name = CheckBox.Name Then
   MsgBox "Test"
 End If
End Sub

QVB6でClickイベントを一時的に削除したい

お世話になります

VB6で二つのコンボックス内でお互いのリストを編集する処理を作りたいのですが、
イベントを止めないと、編集時に相手のコンボックスにClickイベントが発生して無限ループになってしまいます。
そこでRemoveHandler、AddHandlerで一時的にイベントを停止させたいのですが、
今度は「メソッドまたはデータメンバが見つかりません。」のエラーが出てしまいます。
※Me.を付けても同じ結果でした

どのように記述したらClickイベントを止められますか?

Private Sub Combo1_Click()
RemoveHandler Combo2.Click, AddressOf Combo2_Click
ここでCombo2の編集
AddHandler Combo2.Click, AddressOf Combo2_Click
End Sub

Private Sub Combo2_Click()
RemoveHandler Combo1.Click, AddressOf Combo1_Click
ここでCombo1の編集
AddHandler Combo1.Click, AddressOf Combo1_Click
End Sub

お世話になります

VB6で二つのコンボックス内でお互いのリストを編集する処理を作りたいのですが、
イベントを止めないと、編集時に相手のコンボックスにClickイベントが発生して無限ループになってしまいます。
そこでRemoveHandler、AddHandlerで一時的にイベントを停止させたいのですが、
今度は「メソッドまたはデータメンバが見つかりません。」のエラーが出てしまいます。
※Me.を付けても同じ結果でした

どのように記述したらClickイベントを止められますか?

Private Sub Combo1_Click()
RemoveHand...続きを読む

Aベストアンサー

ざっと作ったのと試験環境がないので多少の手直しは必要かも。
おおよそのイメージです。

'Option explicitの直下で定義すること
public bフラグ as boolean  'True:他のイベントで発生、false:ユーザ操作で発生

private form_load

 bフラグ=true

 'ここでコンボ要素を作る

 bフラグ=false
exit sub

private combo1_click

 if bフラグ then 'booleanだからbフラグ=trueと書かなくてもOK
  exit sub
 end if

 bフラグ=true
 combo2.Listindex=combo1.Listindex
 bフラグ=false
exit sub

private combo2_click

 if bフラグ then 'booleanだからbフラグ=trueと書かなくてもOK
  exit sub
 end if

 bフラグ=true
 combo1.Listindex=combo2.Listindex
 bフラグ=false

exit sub

ざっと作ったのと試験環境がないので多少の手直しは必要かも。
おおよそのイメージです。

'Option explicitの直下で定義すること
public bフラグ as boolean  'True:他のイベントで発生、false:ユーザ操作で発生

private form_load

 bフラグ=true

 'ここでコンボ要素を作る

 bフラグ=false
exit sub

private combo1_click

 if bフラグ then 'booleanだからbフラグ=trueと書かなくてもOK
  exit sub
 end if

 bフラグ=true
 combo2.Listindex=combo1.Listindex
 bフラグ=false
exit sub
...続きを読む

QVB.NETでコンボボックスの1行目を空白にしたい

毎度、お世話になっております。

VB.NETでコンボボックスの1行目を空白にしたいです。

(1)[デザイン]のプロパティで設定できますか?
 探したのですが、なかなか見つけられず困っています。
 コードで記述する方法も分からずながら、試してみましたが、うまくいきません。
(2)もしコードで記述するしかなければ、どのように記述したらよいか教えてください。

※データは、DBから取得したものを、DataSetに割り当てています。
 それをPropertyで宣言したコンボボックスに表示するという形に
 しています。

どうぞ、よろしくお願いいたします。 

Aベストアンサー

(1)ではなかったような。。。
(2)の方法です。
dim dt as datatable = DBから取得
Dim drWork As DataRow = dt.NewRow
drWork("AAA") = "" ’表示用
drWork("BBB") = -1 ’値用
dt.Rows.InsertAt(drWork, 0)

Me.ComboBox1.DataSource = dt
'この下の行はプロパティで設定してるならいらない
Me.ComboBox1.DisplayMember = "AAA"
Me.ComboBox1.ValueMember = "BBB"

な感じでしょうか。

QVB.NETでボタンクリックイベントの後に来るPage_Loadのようなイベントはありますか?

タイトルのとおりなのですが、
VB.NETでボタンクリックイベントの後に来るPage_Loadのようなイベントはありますか?
教えてくださいーー

Aベストアンサー

お世話になります。

ボタンを押そうが何をしようが、
PostBack するたびに、Page_Load は走りますよ。
そこで判断をしたいのであれば、
Page.Load イベント内で以下の様に記述してやれば
よいかもしれません。

If IsPostBack Then
  ' 初めてページを読み込んだ時処理
Else
  ' そうでない時処理
  If Not Request("ボタンの name") Is Nothing Then
    ' ボタン押下により発生した PostBack
  End If
End If

参考URL:http://msdn2.microsoft.com/ja-JP/library/system.web.ui.page.ispostback.aspx

Qtextbox.textやlabel.captionの型変換について

VB6.0を使用しています。
テキストボックスやラベルに値として数字を入れているのですが、これらの値に数字で加算減算する場合・・・

●宣言部でintegerを宣言する又は、

●string型で宣言してからプロシージャ内でCint(textbox.text)やCint(label.caption)のように変換するのとどう違うのでしょうか?

Aベストアンサー

宣言部でintegerを宣言した変数でも、textboxやlabelに放り込む時点で、テキスト型にキャストされてます。

また逆に、textbox.textやlabel.captionをそのまま数値計算式に放り込んで計算できたりするのは、「それらが数値だった場合、数値型にキャストする」といった処理が暗黙のうちに行われているためです。

VB6.0に限れば別に問題の無い話かもしれませんが、自身の将来的なことも見越すならば、明示的な型変換はなるべく心がけるようにしたほうがよいと思います。
textbox.textやlabel.captionの値を計算式に用いる場合は、CintやClngで型変換するようにしましょう。


このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング

おすすめ情報