ボタンのClickイベントと、スプレッドのKeyDownイベントやDblClickイベントの違いを教えてください。
フォームが2つあって、フォーム1からフォーム2を呼び出しています。
そのとき、フォーム1をEnabled=Falseにしています。
フォーム2が終了するとき、フォーム1をEnabled=Trueにしています。
フォーム1とフォーム2はスプレッドがあって、フォーム2は検索ダイアログに使っています。
フォーム2にはOKボタンがあります。
OKボタンのClickイベントに、フォーム2のスプレッドからデータを読み取り、フォーム1のスプレッドを検索するコードを書き込んでいます。
(検索は一行一行見ていくようなものです)
フォーム2のスプレッドのEnterキーのKeyDownイベントとDblClickイベントにOKボタンのClickイベントを呼び出す処理を書き込んでいます。
(実際は、CommandButton1.Value=Trueを書き込んでいるだけです)
OKボタンをClickしたときは何とも無く検索ダイアログは終了しますが、スプレッドをEnterキー押したときとDblClickしたとき、ただ単にボタンのClickイベントを呼んでいるだけなんですが、フォーム2が終了したときデバッグして見たんですが強制終了されます。
それは全くトラップできません。
強制終了されたとき、VC++が起動してデバッグ見れるんですが、それが全く分かりません。
VC++を見るとメッセージボックスで、
「ハンドルされていない例外はVB6.EXEにあります:0xC0000005:Access Violation。」
と表示されます。
それで、「0040D405 and byte ptr [ecx+22h],0FCh」のところに黄色い矢印があります。
何とかKeyDownイベントとDblClickイベントでも強制終了されること無くしたくて、DoEventsを入れたりしたのですが駄目でした。
どなたか対策法知ってられる方いらっしゃいませんでしょうか?
開発環境:VB6(SP6)、Spread3.0J
OS:Win7
困っています。よろしくお願いします。
> 開発環境:VB6(SP6)、Spread3.0J
> OS:Win7
この組み合わせで使ったことは無いのですが、経験則から:
コントロールの作りによるところではあるのですが、キーボード系や
マウス操作系のイベント内で、MsgBox や DoEvents や SendKeys を使ったり
フォームやコントロールをアンロードしたりすると、誤動作(?)する物が
幾つか報告されていたりします。
できる限りは、そうした処理は行わないようにするのが無難なのですが、
どうしても必要なのであれば、Timer コントロールを併用して、
実際のイベントが発生してから、ワンテンポ遅れて MsgBox を
表示させるようにすると、改善することがあります。試してみてください。
まずはグレープシティのHPで
Spread3.0Jをアップデートしてみては?
Win7対応かどうかは分かりませんが。
http://www.grapecity.com/japan/support/database/activex_productpatches.htm
Spread3.0Jの頃のはこういうの多かった気がします。
アップグレードしたんですが、駄目でした。
残念です。
>Spread3.0Jの頃のはこういうの多かった気がします。
spreadのバージョンが上がっていたら、この問題は解消されてるんでしょうか?
例えば、ver7とかver6とか。。。
Win7 ではなくて、Vista で動かしていたとき、同様の現象にあいました。
同じように、検索ダイアログで、Spread のボタンを押したとき、
ダイアログを Unload するようコーディングしていたのですが、
Spread 6.0 では駄目でしたが、Spread 7.0 だと解消していましたよ。
遅くなりまして申し訳ございません。
Kozさん、ありがとうございます。
購入することはないかも知れませんが、最新版では解消されていることが
わかって安心しました。
ありがとうございました。