- PR -

モーダルフォームの閉じ方

投稿者投稿内容
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-20 16:28
引用:

トトロさんの書き込み (2005-12-20 16:14) より:

上記方法で解決できました。
助かりました、ありがとうございます。


先ほどから「上記」と言われてますが、どれなのかが判りません...

ところで、しばらくお待ちくださいを同じプロセス内で、
一定の間描画させるのは、単純なようで実は難しいです。
というのも、制御を一定のタイミングで返しても Busy 状態に陥ることがあるからです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-12-20 16:35
引用:

先ほどから「上記」と言われてますが、どれなのかが判りません...


そういえば私もモードレスに変更したんだと思い込んでいます><
キラ
大ベテラン
会議室デビュー日: 2005/12/10
投稿数: 104
投稿日時: 2005-12-20 16:46
記述不足で申し訳ありません。

結果は下記のようになりました。

・モーダル表示にしております。
・子フォームの表示文字については
Label1.Text = "しばらくお待ちください"
Label1.Refresh
で解決できました。

この表示には問題も含んでいるようなので、修正が必要かもしれませんが…
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2005-12-20 17:12
引用:

まどかさんの書き込み (2005-12-20 16:26) より:
え?いままで描画できなかったことは無いんですが。
ちょっと不安になっちゃった。。。
「どぼんさん」
http://dobon.net/vb/dotnet/control/refreshupdateinvalidate.html


すみません、なんだか勘違いか記憶違いかしてたみたいですね。
混乱させてごめんなさいです。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-20 17:29
引用:

トトロさんの書き込み (2005-12-20 16:46) より:

・モーダル表示にしております。


それだと呼び出し元に制御が返りませんよね?
ということは、呼び出し先で「待たなければならない処理」を呼び出しているのでしょうか?

引用:

・子フォームの表示文字については
(snip)
この表示には問題も含んでいるようなので、修正が必要かもしれませんが…


子フォームとは呼び出し先のフォームのことですよね。
表示自体には問題はないのですが、一連の処理のフローに構造的にまずい問題があるかもしれません。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
R・田中一郎
ぬし
会議室デビュー日: 2005/11/03
投稿数: 979
投稿日時: 2005-12-20 17:55
引用:

トトロさんの書き込み (2005-12-20 16:46) より:

結果は下記のようになりました。

・モーダル表示にしております。
・子フォームの表示文字については
Label1.Text = "しばらくお待ちください"
Label1.Refresh
で解決できました。

この表示には問題も含んでいるようなので、修正が必要かもしれませんが…




参考までに。
じゃんぬねっとさんも前投稿で提示されていますが、僕は同様に処理中ウィンドウを表示する場合は、モーダレスフォームを常に手前に表示する方法を使っています。この方法だと、使いまわしが効きます。

なので、アニメーション表示させたりプログレスバー表示させたりと多彩なオプションつけたりと作るのも楽しいです。

コード:

    dim 処理中ウィンドウ as new 処理中ウィンドウフォーム
    処理中ウィンドウ.アニメーション付きで開く()

    do while (重い重い処理をまだ続ける())
        重い重い処理()
    loop

    処理中ウィンドウ.閉じる()


キラ
大ベテラン
会議室デビュー日: 2005/12/10
投稿数: 104
投稿日時: 2005-12-20 18:08
勘違いをしていました。

モーダレス(showメソッド)を使用しています。
AddOwnedFormメソッドを使ってフォームを前面に表示しています。
これで解決したと思っていました。しかしフォームは前面にくるのですが、親フォームを操作できてしまいます。親フォームを操作できないようには出来ないでしょうか?
桜緋女
常連さん
会議室デビュー日: 2004/09/15
投稿数: 46
投稿日時: 2005-12-20 18:17
単に処理の前後にMe.Enabled=Falseではダメでしょうか?


ちなみに以下は、昔似たようなケースでVB6で苦し紛れにやった処理です。

1)モーダルフォーム表示中に行う処理を、クラスに纏める。
2)呼び出し元からモーダルフォームを起動する前に、(1)のインスタンスを渡してあげる。
3)モーダルフォームから(1)の処理を呼び出す。
4)プログレスバーの更新など、モーダルフォームの表示更新が必要な場合は、(1)のクラスのイベントとしてモーダルフォームに通知する。

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