DOBON.NET DOBON.NETプログラミング掲示板過去ログ

クローズイングイベント

分類:[.NET]

ピクチャーボックスのマウスダウンでフラグがクリアされるまで
ループする処理を行っていますが

Do While フラグ
System.Threading.Thread.Sleep(1)
Application.DoEvents()
Loop

ループ中に、フォームのペケボタンを押した場合、
マウスダウンするまで、クローズイングイベントが待機し
マウスダウンでループを抜け、アイドル状態になってからイベントが
発生するみたいなのですが

クローズイングイベントより先に発生するするイベント
または、現在ペケボタンが押されていることを知るフラグは
ないでしょうか
#質問そのものへの回答ではないですが

> ピクチャーボックスのマウスダウンでフラグがクリアされるまで
> ループする処理を行っていますが
>
> Do While フラグ
> System.Threading.Thread.Sleep(1)
> Application.DoEvents()
> Loop

Windowsアプリはイベントドリブンなので、
こういう独自ループで流れを止めるような処理ロジックは組まない方がよいです。
この方法は、VB.NETでも旧VBでもお勧めできない方法です。

> ループ中に、フォームのペケボタンを押した場合、
> マウスダウンするまで、クローズイングイベントが待機し
> マウスダウンでループを抜け、アイドル状態になってからイベントが
> 発生するみたいなのですが

処理ロジックが動作しているため、フォームが閉じたくても閉じられず、
そのためClosingイベントが待ち状態になるではないでしょうか?(想像)

> クローズイングイベントより先に発生するするイベント
> または、現在ペケボタンが押されていることを知るフラグは
> ないでしょうか

サブクラス化(.NETの場合はWndPrcメソッドのオーバーライドでできます)して
メッセージを拾えば、Closingの前に何らかのメッセージは届いているかもしれませんが、
上に書いたように独自ループで待機するという方針を変更された方がよいと思います。
よねKENさん、アドバイスありがとうございます

> Windowsアプリはイベントドリブンなので、
> こういう独自ループで流れを止めるような処理ロジックは組まない方がよいです。
> この方法は、VB.NETでも旧VBでもお勧めできない方法です。

一連の作業の中で、何度もユーザーにピクチャーボックス上の点の入力を求める
必要があるため、入力プロンプトを表示してクリックした座標を返す関数を作り
その中での待ちなので、ボタンのようにユーザーが不定期にクリックしてから
それに応じた処理をするのとは異なります
ダイアロクなんかだと、待ってくれますよね

イベントで解除するまで、中断させるクラスがあればよいのですが
ヘルプでそれらしいのもあったのですが、解説が理解できなかったので
安易な方法をとってしまいました

> サブクラス化(.NETの場合はWndPrcメソッドのオーバーライドでできます)して
> メッセージを拾えば、Closingの前に何らかのメッセージは届いているかもしれませんが、

NETでのサブクラス化は、簡単らしい記事を見たように思います
もうすこし調べて、超簡単なようならその方向でいこうかと思います

DOBON.NET | プログラミング道 | プログラミング掲示板