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

ピクチャーウィンドウの保護について

環境/言語:[.NET 2003]
分類:[.NET]

こんにちは。

本日はVBのディスプレイウィンドウについて質問があります。
スキャナから読み込んだ画像をピクチャーウィンドウみたいなウィンドウ
(ある開発ツールを使っています)
に表示させています。
しかしボタンを押下して表示されるサブ画面が横切ると、
画像が白く切れてしまいます。。

何か保護するやり方などございますか?
それともロジックの順番など、構造的なものなのでしょうか?
こんにちは、じゃんぬねっと です。

■No9391に返信(FITOさんの記事)
> 何か保護するやり方などございますか?
> それともロジックの順番など、構造的なものなのでしょうか?

「保護」の意味合いは判り兼ねますが、別のウィンドウで隠されてしまった場合は、
Refresh() するしかないんじゃないでしょうか...

> ピクチャーウィンドウみたいなウィンドウ(ある開発ツールを使っています)

これだけでは、どのように"そこ"へ描画しているのか判りませんので、何とも言えないです。(^-^;)
FITOです。
どうやらrefreshをやったらうまく行きそうです。
すいません、じゃんぬめっとさん、ありがとうございます。
ちなみに、Loadイベントの関数の中で、フォームがロードする前に、
自分を殺す方法ってご存知ですか?(Me.Closeで死にますか?)
ロードしたら×印押せば良いのですがね。。

■No9395に返信(じゃんぬねっとさんの記事)
> こんにちは、じゃんぬねっと です。
>
> ■No9391に返信(FITOさんの記事)
>>何か保護するやり方などございますか?
>>それともロジックの順番など、構造的なものなのでしょうか?
>
> 「保護」の意味合いは判り兼ねますが、別のウィンドウで隠されてしまった場合は、
> Refresh() するしかないんじゃないでしょうか...
>
>>ピクチャーウィンドウみたいなウィンドウ(ある開発ツールを使っています)
>
> これだけでは、どのように"そこ"へ描画しているのか判りませんので、何とも言えないです。(^-^;)
こんにちは、じゃんぬねっと です。ノリ, ^ー^)li

■No9478に返信(FITOさんの記事)
> どうやらrefreshをやったらうまく行きそうです。

やはり再描画の問題でしたか。

> ちなみに、Loadイベントの関数の中で、フォームがロードする前に、
> 自分を殺す方法ってご存知ですか?(Me.Closeで死にますか?)
> ロードしたら×印押せば良いのですがね。。

相変わらず「モノ」がわからないので、何とも言えませんが、
オブジェクトを使っているのならば、明示的に "殺して" あげてください。(^-^*)
FITOです。

>じゃんぬめっとさん
ありがとうございます。
モノの説明が難しいのですが、
環境は.NET 2003で、Form1をメインフォームとしています。
メインフォームを実行すると、あるサーバからのソケットによる
接続を待つのですが(その間はMe.visible.enableをFalseにしています)
、そのための準備がうまくいかないと、
Me.Closeイベントを発生させています。
Me.Closeイベントでは適当なメッセージを出して関数は終わり、
再びメインの呼び出し側のMe.Closeに戻ってきて、
その次の行でExit Subしているのです。

1回ロードが完了して、再びenableをFalseにしてソケットを待っている場合は、
Me.closeすると綺麗にAPが落ちるのです。
ただ、最初に起動してロード自体する前にMe.closeしても
駄目なんです。
2回目以降は確かに、メモリ上に存在しているから綺麗に落ちるのかな、と。
1回目にロードされる以前は、まだロードの半ばなのでクローズできないの
ですか?何か良い方法ないでしょうか?
落とすとか殺すとかではなくて(-_-;)、ロードを辞める命令が必要、
ということですかね・・!?





■No9480に返信(じゃんぬねっとさんの記事)
> こんにちは、じゃんぬねっと です。ノリ, ^ー^)li
>
> ■No9478に返信(FITOさんの記事)
>>どうやらrefreshをやったらうまく行きそうです。
>
> やはり再描画の問題でしたか。
>
>>ちなみに、Loadイベントの関数の中で、フォームがロードする前に、
>>自分を殺す方法ってご存知ですか?(Me.Closeで死にますか?)
>>ロードしたら×印押せば良いのですがね。。
>
> 相変わらず「モノ」がわからないので、何とも言えませんが、
> オブジェクトを使っているのならば、明示的に "殺して" あげてください。(^-^*)
>あるサーバからのソケットによる接続を待つのですが
Disposeしてますか?
> >あるサーバからのソケットによる接続を待つのですが
> Disposeしてますか?

SocketはDisposeではなくCloseですね。しかし、Closeしないからアプリケーションが終了しないということはない様に思えます。(もちろん終了前にCloseしたほうがよいですが。)

私がお勧めするのは、LoadイベントハンドラでフォームのCloseを呼び出すのではなく、初めからフォームのインスタンスを作成しないという方法です。

DOBON.NET .NET Tips - アプリケーション開始時のフォームを非表示にする
http://dobon.net/vb/dotnet/form/notopenform.html
FITOです。

回答いただいた方、ありがとうございます。
Moduleの中に設定したsub mainをスタートアップにして、そこをForm1.ShowDialog()とし、すぐその下にend subを入れました。
Form1の中でLoadに失敗すると、すんなりそれでAPが落ちます。
以前はForm1.Show()を行っていて、これだとModuleのsub mainが終わったあとに
ソケットが切れてしまいましたうまくいかなかったのです。
ShowDialog()にするとそんなこともなく、且つFormのLoad時に失敗したときも
すんなり落ちるので(破棄したオブジェクトにアクセスできません、
のようなことが起きない)、1石2鳥でした。。。

最後に、ShowとShowDialogは戻りを待っているということで違いがあるのですか?

■No9551に返信(管理人さんの記事)
>>>あるサーバからのソケットによる接続を待つのですが
>>Disposeしてますか?
>
> SocketはDisposeではなくCloseですね。しかし、Closeしないからアプリケーションが終了しないということはない様に思えます。(もちろん終了前にCloseしたほうがよいですが。)
>
> 私がお勧めするのは、LoadイベントハンドラでフォームのCloseを呼び出すのではなく、初めからフォームのインスタンスを作成しないという方法です。
>
> DOBON.NET .NET Tips - アプリケーション開始時のフォームを非表示にする
> http://dobon.net/vb/dotnet/form/notopenform.html

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