- PR -

意図しないClickEventが実行される・・・

1
投稿者投稿内容
赤い水性
会議室デビュー日: 2004/11/01
投稿数: 10
投稿日時: 2005-02-10 14:36
当方環境は、VB.NETで開発を行っています。
OSはWindows2000になります。

2つの画面の行き来で意図しない動作が発生しますので、
状況を以下に記します。

@A画面からB画面をShowDialogで呼び出します
AB画面にはグリッドがあり、そこにデータが一覧表示されています
BB画面のグリッドのセルを1つダブルクリックすると
 B画面をクローズし、A画面に制御が戻ります

問題は、B画面でダブルクリックした後の動作です。
A画面には、シングルクリック(ClickEventハンドル)で動作する
一覧表示用グリッドがあります。

仮に、Bの『B画面でダブルクリック』の動作を、
下にある『A画面のグリッド』にあたる範囲内の位置で行うと、
B画面がクローズされたタイミングで
A画面のグリッドのシングルクリック処理(ClickEvent)処理が走ってしまいます。

雰囲気としては、B画面で行ったダブルクリックの『クリックのバッファ』の
ようなものが残り、その座標にあったA画面のClickEventが実行されているようです。

対応策として、キーボードバッファのようなものができれば・・・?
と思ったのですが、解決できそうな方法をヒントでも構いませんので
ご教授頂ければ、と思います。
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-02-10 15:40
「グリッド」とは、DataGridコントロールのことでしょうか?

DataGridコントロールと仮定して実験してみましたが、再現しませんでした。
赤い水性
会議室デビュー日: 2004/11/01
投稿数: 10
投稿日時: 2005-02-10 15:55
情報不足でした。
申し訳ございません。

VB6.0から移行して使っていた為に、
FlexGrid(AxMSFlexGridLib.AxMSFlexGrid)を使用しています。

どうも、FlexGridのClickEventのみで発生するようです。

-----

引用:

kanaiさんの書き込み (2005-02-10 15:40) より:
「グリッド」とは、DataGridコントロールのことでしょうか?

DataGridコントロールと仮定して実験してみましたが、再現しませんでした。




[ メッセージ編集済み 編集者: 赤い水性 編集日時 2005-02-10 16:20 ]
kanai
ベテラン
会議室デビュー日: 2004/09/13
投稿数: 98
投稿日時: 2005-02-10 16:40
MSFlexGridにしたら、現象を再現できました。

ただ、VB6.0で同様のコードを記述してみたところ、同じ現象が発生しました。
なので、VB.NET/VB6.0の相違ではなく、MSFlexGridの仕様(もしくは不具合)と考えられます。

よく観察してみると、BのDblClickはダブルクリックの2回目のMouseDownで発生し、AのClickEventはその後のMouseUpが伝播してしまっているようです。
(ダブルクリックの2回目を押しっぱなしにして、しばらくしてから放すと分かります)

AのClickEventの処理をMouseDownEventに移動すると、回避できました。
(他との関係でこの移動が可能かどうかは分かりませんが)
赤い水性
会議室デビュー日: 2004/11/01
投稿数: 10
投稿日時: 2005-02-10 17:24
大変有用な情報をありがとうございました。

確かにMouseDownEventではClickEventのような不具合は
発生しませんでした。
他の処理に影響はないかを確かめた上で、こちらのハンドルを
使用してみようと考えております。
1

スキルアップ/キャリアアップ(JOB@IT)