DOBON.NETプログラミング掲示板過去ログ
プログレスダイアログのモーダル表示について。
題名: プログレスダイアログのモーダル表示について。
著者: クフィス
URL:
http://dobon.net/vb/dotnet/programing/progressdialog.html
日時: 2008/06/11 11:01:26
ID: 22239
この記事の返信元:
(なし)
この記事への返信:
[22245]
Re[1]: プログレスダイアログのモーダル表示について。
Azulean
2008/06/12 0:21:47
ツリーを表示
環境/言語:[VB2005]
分類:[.NET]
http://dobon.net/vb/dotnet/programing/progressdialog.html
こちらで公開されているプログレスフォームを参考にさせていただき、
実装しました。
大変助かったのですが、モーダル表示がうまくいかないので、アドバイス
いただけないでしょうか。
具体的には、フォームに配置されているボタンを押すと
プログレスダイアログフォームが表示され、進捗バーが増えていくのですが、
少し時間が経つとモーダルが解除されてしまうのか、フォームにフォーカスを
移せるようになってしまうのです。
試しにこちらで公開されているサンプルそのままで実装し、フォームに
配置されているボタンを押した時にプログレスダイアログフォームが
表示されるようにしてみました。
同様に、最初はモーダルになっているのですが、表示元のフォームの
×ボタンを連打していると、ある程度進捗が進んだところでモーダルが
解除され、表示元フォームにフォーカスできてしまいます。
プログレスダイアログの表示が消えるまで、完全にモーダルとするには
どのように修正、実装すれば良いでしょうか?
表示前に、表示元をEnabled=Falseにしてみたりもしたのですが、変化が
ありません。
自分のレベルでは修正箇所が見つからず、困っています。
アドバイスいただけないでしょうか。
宜しくお願いします。
題名: Re[1]: プログレスダイアログのモーダル表示について。
著者: Azulean
日時: 2008/06/12 0:21:47
ID: 22245
この記事の返信元:
[22239]
プログレスダイアログのモーダル表示について。
クフィス
2008/06/11 11:01:26
この記事への返信:
[22253]
Re[2]: プログレスダイアログのモーダル表示について。
クフィス
2008/06/12 14:05:06
ツリーを表示
この投稿はXPまたはVistaを前提としています。
> 同様に、最初はモーダルになっているのですが、表示元のフォームの
> ×ボタンを連打していると、ある程度進捗が進んだところでモーダルが
> 解除され、表示元フォームにフォーカスできてしまいます。
このとき、最大化ボタンが無効状態に変化したり、元のフォームの内容が白くなったりしますか?(いずれかでも両方でも)
または、タイトルバーに「応答なし」とか表示されますか?
#ゴーストウィンドウの可能性を疑ったもの。
題名: Re[2]: プログレスダイアログのモーダル表示について。
著者: クフィス
URL:
http://dobon.net/vb/dotnet/programing/progressdialog.html
日時: 2008/06/12 14:05:06
ID: 22253
この記事の返信元:
[22245]
Re[1]: プログレスダイアログのモーダル表示について。
Azulean
2008/06/12 0:21:47
この記事への返信:
[22259]
Re[3]: プログレスダイアログのモーダル表示について。
Azulean
2008/06/14 0:39:28
ツリーを表示
OSを書き忘れていました。
ご指摘の通り、WindowxXPです。
>このとき、最大化ボタンが無効状態に変化したり、元のフォームの
>内容が白くなったりしますか?(いずれかでも両方でも)
>または、タイトルバーに「応答なし」とか表示されますか?
はい、元のフォームが白くなったり、「応答なし」が表示されてしまいます。
題名: Re[3]: プログレスダイアログのモーダル表示について。
著者: Azulean
日時: 2008/06/14 0:39:28
ID: 22259
この記事の返信元:
[22253]
Re[2]: プログレスダイアログのモーダル表示について。
クフィス
2008/06/12 14:05:06
この記事への返信:
(なし)
ツリーを表示
XPやVistaでは「プログラムのコードが動き続ける状態」、俗に言うビジー状態が長い間続くと、ダミーのフォーム(ゴーストウィンドウ)に置き換えられます。
これが操作可能な形として見えるわけです。
プログラムが異常な状態になっていると判断されていることになります。
正当な解決策としては、重たい処理・長くかかる処理をBackgroundWorker等を使って別のスレッドで実行することです。
DoEventsでそれなりにうまく動くように見えますが、辞めた方が無難です。
この辺はマルチスレッド、ワーカースレッドあたりの語句を絡めて調べてみて下さい。
DOBON.NET
|
プログラミング道
|
プログラミング掲示板
分類:[.NET]
http://dobon.net/vb/dotnet/programing/progressdialog.html
こちらで公開されているプログレスフォームを参考にさせていただき、
実装しました。
大変助かったのですが、モーダル表示がうまくいかないので、アドバイス
いただけないでしょうか。
具体的には、フォームに配置されているボタンを押すと
プログレスダイアログフォームが表示され、進捗バーが増えていくのですが、
少し時間が経つとモーダルが解除されてしまうのか、フォームにフォーカスを
移せるようになってしまうのです。
試しにこちらで公開されているサンプルそのままで実装し、フォームに
配置されているボタンを押した時にプログレスダイアログフォームが
表示されるようにしてみました。
同様に、最初はモーダルになっているのですが、表示元のフォームの
×ボタンを連打していると、ある程度進捗が進んだところでモーダルが
解除され、表示元フォームにフォーカスできてしまいます。
プログレスダイアログの表示が消えるまで、完全にモーダルとするには
どのように修正、実装すれば良いでしょうか?
表示前に、表示元をEnabled=Falseにしてみたりもしたのですが、変化が
ありません。
自分のレベルでは修正箇所が見つからず、困っています。
アドバイスいただけないでしょうか。
宜しくお願いします。