- - PR -
Excelを一度開くとMe.Close()が効かなくなる
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-10-22 19:38
よろしくお願いします。
5秒毎にページをロードしてDBから情報を取得して、 画面を再描画しているページがあります。 <<画面の詳細>> Panelを設置。 Panel上にBottunを設置。 Panel上にはDBから取得したデータの数だけBottonを並べる。 Panel上のBottunのtextプロパティにはDBから取得した値を設定。 画面再描画時にはPanel上のBottunにフォーカスを合わせる。 タイマーは以下のように設定。 Private Sub BaseForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load indTimer = New Timer() AddHandler indTimer.Tick, AddressOf TimerEventProc indTimer.Interval = 5000 indTimer.Start() end Sub 上記コードを記述したページ(WindowsForm)が開いた状態で以下の操作をするとMe.Closeが効かなくなってしまいました、 @すでに開いているExcelをActiveにする。 A対象のページに戻る。 Bボタン(画面遷移のみ実装)を押下する。 CMe.Close()が無視される。 ボタンのコードは以下のとおりです、Me.Closeを無視しますが、exには入りません。 Private Sub btn1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn1.Click Try Me.Close() Catch ex As Exception 'ログ出力 End Try End Sub よろしくお願いします。 [ メッセージ編集済み 編集者: ごろう 編集日時 2007-10-23 15:27 ] | ||||
|
投稿日時: 2007-10-23 10:55
バージョン等が書かれていないので何とも言えませんが、私の所では再現しませんでした。(Excel2007 VS2005 デバッグ実行ではなくexe単独で実行)
新しくWindowsFormのプロジェクトを作って、btn1というボタンを張っただけのフォームを作って、ごろうさんの書いたbtn1のイベントハンドラをコピーしてきてください。 それで同じ現象が出ますか? 出ないのであれば、ごろうさんの書いたソースから少しずつソースをコピペして、どういったコードを追加したらそのような動きになるのかを調べてください。 特定のソースが分かったら、それ以前にコピペしてきていたソースを現象が無くならないようにしながらできるだけ消してください。 すると、現象の発生する最小限のソースが出来上がるので、それを教えてください。 | ||||
|
投稿日時: 2007-10-23 13:09
とにかく、まっさらから少しずつ処理を追加していき悪さをするステップを突き止めましょう。
1.Me.Closeのみ 2.+タイマのみ(タイマ内処理無し) 3.全処理 #っていうか、タイトルからするとExcelが原因と特定しているような。 あとは、FormClosingイベントが発生するか確認。 もし発生しているのなら、暗黙のフォームインスタンスを閉じる流れの中で参照しているとか。>あくまで考えられる予想。実際そのような挙動になるかは未確認。 | ||||
|
投稿日時: 2007-10-23 13:34
とりあえず Timer Tick に実装されている処理が見たいです。
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-10-23 15:26
ご返答ありがとうございます。
とりあえず、現在まででわかっている事は、 1.ExcelでなくてもMe.Close()が無視される →一度最前面に他のファイルを持ってきて、WindowsFormに戻ると再現できる。 2.FormClosingイベントは発生していない です。 以上です。 応急措置として、 再描画時にPanel外のBottunにフォーカスを合わせるようにしたら、 Me.Close()が無視される事がなくなりました。 <<画面の詳細>> Panelを設置。 Panel上にBottunを設置。 Panel上にはDBから取得したデータの数だけBottonを並べる。 Panel上のBottunのtextプロパティにはDBから取得した値を設定。 画面再描画時にはPanel上のBottunにフォーカスを合わせる。 [ メッセージ編集済み 編集者: ごろう 編集日時 2007-10-23 15:28 ] | ||||
|
投稿日時: 2007-10-23 15:35
言いたいことはわかるんだけど「ファイル」じゃなくて「ウィンドウ」の間違いじゃない? あと最近Buttonを「ぼっつん」って書くのが流行りなのかな。 それはそれとしてフォーカスを元のButtonっていうかウィンドウに戻せば良いってことなんだろうね。 そうだとしてWMも発生してなかったりするのかね。。。なんだろ? MDIの場合は似たような問題があったと思うけど普通のフォームでは聞いたことがない。 タイマーによって動く処理が間に合ってなくて無視されているのとばかり思っていたが。。。 で問題なのは再現できないんだよな。俺んとこだと。最前面って関係あるのかな。 単にフォーカスを戻すことで処理を待ってくれてそれからCloseが働くとかそんなんじゃないのかな。 | ||||
|
投稿日時: 2007-10-23 21:17
他の人のところで再現できないと、あなたが思っている以外のところに原因がある、ということになるかと思います。
もう一度、コードを書いた意図と、コードに書かれている内容を照らし合わせてみることを勧めます | ||||
|
投稿日時: 2007-10-23 21:26
了解です。 ちょっと今DataGrid関連でてこずっている仕事があるので、 終了後にもう一度整理してからまた質問させてください。 よろしくお願いします。 |
1