| 1 |
|
1: お名前:PG
|
|
|
2011/01/13 11:11:37 |
|
|
環境/言語:[C#2005]
DataGridViewのCellContentClickイベントとListViewのItem_Activateイベントの組み合わせで問題が発生しております。
以下の手順で再現できます。
以下の2つのフォームを用意
フォームA
○DataGridView
・ボタン列を設定
→CellContentClickイベントでフォームBをShowDialog()で開く
フォームB
○ListView
・Viewプロパティ = Details
・適当な行を用意しておく
・Item_Activateイベントを設ける
→行のダブルクリック(Item_Activateイベント)でDialogResult.OKとし、フォームBが閉じるようにしている
1.フォームAのDataGridViewのボタンをクリックし、フォームBを開く
2.フォームBのListViewをダブルクリックし、フォームを閉じる
(フォームBを閉じた時に、マウスポインタが1.でクリックしたボタンの位置になるようにフォームを閉じる)
3.フォームBが再度開かれてしまう
上記の手順で行いますと、フォームBを閉じた後にフォームAのDataGridViewのCellContentClickイベントがどういうわけか再度発生してしまいます。
何か回避策はありませんでしょうか?
ご教授お願いします。
|
|
2: お名前:石野光仁
|
|
|
2011/01/13 13:09:25 |
|
|
こんにちは、アイライトの石野です。
手元に、VS2008があったのでそちらで確認しましたが
イベントが重複して上がる事はなかったですね。
VS2005でも確認してみたいと思います。
なんとなく思うところとしては、イベントが重複で登録されてないでしょうか?
関連するイベントを調べてみてください。 += new とかを検索すると見つけやすいのではないでしょうか?
|
|
3: お名前:PG
|
|
|
2011/01/13 15:31:20 |
|
|
VS2008では確認されませんでしたか・・・。
是非ともVS2005でもご確認ください。
イベントは重複しておりません。
サンプルPGが作れる余裕があれば、用意いたします。
|
|
4: お名前:石野光仁
|
|
|
2011/01/13 16:02:51 |
|
|
ごめんなさい。。。
読みこぼしていました・・・
グリッドのボタンの上に、2枚目の画面を重ねておいてダブルクリックをするのですね。。。
現象が出ますね。回避コードを考えてみましょう。
|
|
5: お名前:石野光仁
|
|
|
2011/01/13 16:30:56 |
|
|
ちなみに、VS2008でも同じ動作で、問題の根本はDataGridViewがマウスのイベントを吸い取っていますね。
さて、どうやってDataGridViewからマウスのイベントを吐き出させるかが問題ですね。
|
|
6: お名前:PG
|
|
|
2011/01/13 17:42:40 |
|
|
現象確認できてよかったです。
果たして、どうすればDataGridViewからマウスのイベントを吐き出せるのでしょうか。。。
|
|
7: お名前:石野光仁
|
|
|
2011/01/13 19:04:51 |
|
|
CellContentClickイベント嫌いーー
CellClickで代用すると、それらしくなります。
これで回避してもらえませんか?
|
|
8: お名前:PG
|
|
|
2011/01/14 10:28:55 |
|
|
CellClickで代用しましたところ、今のところ回避できているような気がします♪
ボタンはCellContentClickイベントを使うものだと思っていたのですが、CellClickイベントとはどのような違いがあるのでしょうか?
ボタン以外のCellTypeで弊害が起きるのでしょうか??
|
|
9: お名前:石野光仁
|
|
|
2011/01/14 10:35:33 |
|
|
こんにちは、アイライトです。
CellClickだと、ボタン以外の項目でも反応すると思います。
ColumnIndexを見てボタンだけを反応するようにしておけば、見た感じ問題ないように思えました。
上手く行って何よりです。
|
|
10: お名前:PG
|
|
|
2011/01/14 13:56:48 |
|
|
ご返答ありがとうございます。
セルのサイズに対してボタンのサイズが小さく、余白があるような場合は少し違和感がありますが、セルのサイズ = ボタンのサイズの仕様なので今回は問題ありません。
この度はお忙しい中、ご親切にありがとうございましたm(__)m
別件でご相談することが今後ありましたら、またよろしくお願いいたします。
|
| 1 |