• ベストアンサー

comboboxのクリックイベントについて

VB6です comboboxを設置してクリックイベントに処理を書いたら、フォームロード時に必ず1回クリックイベントが発生します。 当初はフラグを立ててこの現象を回避していたのですが、コードを書くうちに、この最初のクリックイベントが面倒で仕方ありません。 comboboxを設置するとフォームロード時に必ずクリックイベントが発生するのはVB6の仕様なのでしょうか。 それともほかに回避の仕方があるのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

VB6ですと フラグでの制御が簡単だと思います FormのLoadイベントなら VisibleプロパティがFalseの状態ですので これを判断材料にしてみてはいかがでしょう If Combo1.Parent.Visible=false then exit sub # この方法だと毎回追加しないといけませんが ... 別の手立ては UserControlにComboBoxを貼って Clickイベントを ComboBoxにバインドします このClickイベントで if UserControl.Parent.Visible=false then Exit Sub を追加して使うといった方法です List,ListIndex,ListCountなど ComboBoxのプロパティなどバインドすることもお忘れなく ...

xiaolong_goo
質問者

お礼

お返事ありがとうございます。 同じようなことをやってみましたが、やはり後からの処理が面倒でした。 バインドも試してみたいと思います。

その他の回答 (1)

回答No.2

comboboxの初期状態が、リストの内容を選択していないなら SelectIndexを調べて、すぐに処理を中断することが出来ます。 If Combobox1.SelectIndex = -1 Then Exit Sub

xiaolong_goo
質問者

お礼

Indexはロードの際に0を選択しています。 いま、リストを未選択にして処理を考えています。 お返事ありがとうございました。

関連するQ&A

  • Loadイベント中にほかのイベントを発生したくない

    VisualC# .net です。 フォームを表示する場合に コンストラクタが呼ばれその後ロードイベントで フォームのコントロールの初期設定を行っています。 (この方法がまちがっている?) ロードイベント内でコンボボックスの初期設定を行うと コンボボックスのイベントが発生してしまいます。 以下参照にて このイベントでメッセージを表示しているのですが 初期設定では出てほしくありません。 そこで、 これを防ぐためには以下のようにフラグを立てるような 方法しかないのでしょうか? それともDebugger.IsAttached のようなものが 用意されているのでしょうか public bool iload = false;     (←仮フラグを追加) private void Form1_Load(object sender, EventArgs e) { iload = true;    (←仮フラグを登録) ComboBox1.SeletedIndex = 0; iload = false;   (←仮フラグを削除) } private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e) { if (iload) return;     (←仮フラグ登録時はなにもしない) MessageBox.Show("変更しました"); }

  • 別フォームから戻ったときのイベント

    VB.NETの質問です。 フォームA(以下A)から、フォームB(以下B)を モーダル表示で呼びだした後Bを閉じて、Aに戻ったときに、 フラグを立てたいと思っています。 このタイミングのイベントは どのようにして取ればよいのでしょうか? ちなにみAのActivatedイベントで試してみたのですが、 結果NGでした。 Aの上にBが重なっている状態で Bの部分的に見える箇所を一瞬クリックしても Activatedイベントが実行されてしまい、 フラグが立ってしまします。 もちろんモーダル表示なので、Aが前面にくることは ないのですが、なぜかActivatedイベントが実行されてしまいます。 きちんとBを閉じて、Aに戻った時に限り フラグを立てたいと思っています。 Bを閉じた時にB側でフラグを立てる方法もありますが、 仕様の都合上、A側で処理をさせたいのです。 以上、わかりづらいかもしれませんが ご存じの方がいましたらご教授ください。

  • ボタンをマウスで押し続けたときのイベント

    VB2005,Frameworks2を使用しています。 フォームに設置したButtonは、通常マウスをクリックする度にイベントが発生しますが、これをボタンをマウスで押している間だけイベントを発生されたいのですがその様なイベントやボタンの設定が見つかりません。 やはりタイマー等を使わないと再現できないのでしょうか? よろしくお願いします。

  • VB.2010 ComboBox 項目選択

    Builder C++ではかなりのプログラムを作成していますが、拠点でプログラムを変更出来る様にVBでプログラムを作成し直しているVBに関してはほぼ初心者です。 VBでComboBoxを使用して内容を選択させようとして居ます。 プログラムの最初でComboBoxのTextに初期値(前回選択値)を設定して居ます。 ComboBoxで選択された内容はComboBoxの内容が変更された時に次回プログラム実行時の初期表示の為にiniファイルに書き込みをして居ます。 問題はプログラムの最初に初期値を書き込んだ時にもComboBoxの内容が変更される為、内容変更の割り込みが入り、iniファイルの書き込みルーチンが動作してしまう事です。 ComboBoxのTextの書き込の時に割り込みをしなくて、選択をした時のみ割り込みが発生する割り込みがあると良いのですが、調べた範囲では無い様でした。 Builder C++ではMouseUPイベントの割り込みを使って同じ機能を実現させたのですが、VBのMouseUpイベントでは一つ前に選択された内容しか入って来て居ない様です。 MouseUpのイベント割り込み先には以下のコーディングをして居ます。 Private Sub ComboBox1_MouseUp(ByVal sender・・・・・ Label1.Text = ComboBox1->Text End Sub しかし、これだと選択した時は前回選択された内容が表示されてしまいます。 当然 Private Sub ComboBox1_SelectedIndexChanged(ByVal sender ・・・ Label1.Text = ComboBox1->Text End Sub の場合は選択された内容が表示されます。 双方共、実行後のComboBox自体の表示内容は選択されたものになって居ます。 MouseUpのイベントの時にも選択された内容が表示されれば、このイベントでは ComboBox1->Text 初期値を設定した時はイベントが発生しないので都合が良いのですが、一つ前に選択された内容しか表示されません。 MouseUpの時には未だ内部処理が終了していないので新しい内容が表示出来ないのでしょうか。 Builder C++ には Application->ProcessMessages()と言う、他のタスクを先に実行させる関数がありますが、多分VBにもその様な関数があると思いますので、それを挿入すれば最新の状態を入手できるものでしょうか。 上記目的を達成出来る方法はありますでしょうか。 無ければフラグを使用して、ComboBox1->Text に初期値を設定した時には割り込み先でiniファイルの書き込みをしない様にプログラムする予定です。 当然、初期値を表示して居るのですから初期値設定時に再度iniファイルに書き込みがあっても問題は無いのですが、実際には動作していけないプログラムを書きますので、初期値書き込み時には割り込みが無い様にしたいのです。 VBでの処理方法がありましたらお教え下さい。宜しくお願い致します。

  • サブフォームでのダブルクリックイベント

    Access2003です。 フォームにサブフォームを設置し、直接テーブルを表示させています。 このサブフォームのテーブルのある行をダブルクリックしたら その行のデータを他のフォームのオブジェクトにセットしたいのですが 行や行のデータ全てを取得は出来るのですが、サブフォームのイベントがEnterとExitしかなくて、イベント発生が出来ません。 フォームのダブルクリックでXとYを見て…と思ったのですがサブフォーム上ではフォームのダブルクリックイベントが発生せず。 サブフォームのテーブルはユーザーがソートする事もあるのでベタに上にテキストボックス等を置く事は出来ません。 どうにかダブルクリックで動作させる方法はありませんでしょうか?

  • VBでクリックイベントを発生させたいです

    VBのことについての質問なんですが 座標を指定してマウスカーソルを自動でクリックさせたり、何秒間か長押しさせたりするイベントの発生のさせ方はどうするんですか? またデスクトップの座標ではなく、フォーム内での座標指定はできますか? 回答よろしくお願いいたします

  • VB6 コマンドボタン クリックイベントについて

    教えてください。 フォームに貼り付けているコマンドボタンのクリックイベントについてですが、クリックイベント内の処理で処理に時間がかかります。コマンドボタンを1度クリックすると、この処理を実行します。この状態であれば、問題ないのです。ところが、コマンドボタンを押して、処理している間にコマンドボタンを連打すると、ずーっと同じ処理を繰り返してしまいます。 クリックイベントが待ち行列にたまっているように思えるのですが、 これを回避する方法などがあれば教えてください。 ・待ち行列をクリアするとか ・待ち行列にイベントがたまっていても、1度しか実行しない。 などなど、具体的な方法とサンプルコードなどを教えていただけないでしょうか。お願いします。 環境VB6 WIN2K です。

  • VB2010 ComboBoxの使い方について、教えてください。

    VB2010 ComboBoxの使い方について、教えてください。 From[デザイン]にて、ComboBoxを配置し、タスクの「項目編集・・・」で項目を設定しました。 項目の内容は、以下の四つ。 AAA BBB CCC DDD イベントが発生すると Private Sub ComboBox_SelectedIndexChanged(....)に入り、この中で Dim index As Integer index = Me.ComboBoxFU.SelectedIndex とすれば、indexの値が変わると踏んでいましたが、値が変わりません。 Webで調べてみましたが、皆ソース上での設定しか書いていないようです。 初期設定での設定方法を教えてください。 以上、よろしくお願いします。

  • ラインコントロールにクリックイベント

    ラインコントロールにイベントが発生しないことは分かっています。 なので、自作しないといけないのかなと思っていますが、良い方法が見つかりません。クリックイベントが発生するようなラインのユーザーコントロールの作り方を教えていただけませんか? あるいは、フォームのクリックイベントで、そこがラインコントロール上か否かという判断をさせる方法でもいいです。 よろしくお願いします。

  • comboboxの選択

    こんにちわ、よろしくお願いします。 WinXP VB6.0 oracle10g使用 comboboxとTextBoxと連動したいと思っています。 担当者のデータ コード、名前  1   山田  2   佐藤 3   足立 55   安藤 999 不明 とあるのですが、TextBoxに"3"と入力したら (Text1_LostFocusイベントでやってみました) comboBoxは"安藤"と出るように(選択状態)したいと思っています。 ListIndexでやってみましたが、コードが必ずしも順番に入っている状態ではないので困っています。 (DBからよんでくる時、FORM_LOADイベントでも実行したいです。) よろしくお願いします。

専門家に質問してみよう