C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[15]: 画像のクリアについて


(過去ログ 14 を表示中)

[トピック内 23 記事 (1 - 20 表示)]  << 0 | 1 >>

■4558 / inTopicNo.1)  画像のクリアについて
  
□投稿者/ 美流久 (19回)-(2007/06/18(Mon) 18:53:08)

分類:[.NET 全般] 

こんにちは☆

VB2005です

すごく初歩的な事かと思いますが、pictureboxのイメージのクリア方法って破棄する、Disposeしかないでしょうか?

フォームを閉じずに何度もpictureboxを使いたいのですが、いったんdisposeすると表示されないので困っています。
ぐぐってみましたが、なかなか見つからなかっです。

アドバイス宜しくお願いします。
引用返信 編集キー/
■4559 / inTopicNo.2)  Re[1]: 画像のクリアについて
□投稿者/ 特攻隊長まるるう (66回)-(2007/06/18(Mon) 18:57:03)
No4558 (美流久 さん) に返信
        Me.PictureBox1.Image = Nothing
では?

引用返信 編集キー/
■4560 / inTopicNo.3)  Re[2]: 画像のクリアについて
□投稿者/ 美流久 (20回)-(2007/06/18(Mon) 19:00:49)
No4559 (特攻隊長まるるう さん) に返信
> ■No4558 (美流久 さん) に返信
> Me.PictureBox1.Image = Nothing
> では?

おお!!
なるほど・・・まるるうさんありがとうございます。
nothingはif文で結構使っているのに・・・pictureboxで使うとは思っても見ませんでした。
orzありがとうございます。


解決済み
引用返信 編集キー/
■4562 / inTopicNo.4)  Re[3]: 画像のクリアについて
□投稿者/ 未記入 (101回)-(2007/06/18(Mon) 19:17:27)
No4560 (美流久 さん) に返信
> おお!!
> なるほど・・・まるるうさんありがとうございます。
> nothingはif文で結構使っているのに・・・pictureboxで使うとは思っても見ませんでした。

思っても見ませんでした・・・?
ここを見て、Nothingの意味を理解していないのではないかと老婆心ながらに思いました。
Ifで結構使っているとありますが、意味を理解して使っていますか?
何だかおまじないのように使っているように見受けられますが。
引用返信 編集キー/
■4565 / inTopicNo.5)  Re[4]: 画像のクリアについて
□投稿者/ YAS (5回)-(2007/06/18(Mon) 20:32:26)
いきなりNothingを代入するよりも,一度別の変数で参照してからNothingを代入し,
そのあとで参照した変数をDisposeした方が,一時的に必要になるメモリの量が減る
のでは?

引用返信 編集キー/
■4566 / inTopicNo.6)  Re[5]: 画像のクリアについて
□投稿者/ IIJIMAS (3回)-(2007/06/18(Mon) 21:20:00)
No4565 (YAS さん) に返信
> いきなりNothingを代入するよりも,一度別の変数で参照してからNothingを代入し,
> そのあとで参照した変数をDisposeした方が,一時的に必要になるメモリの量が減る
> のでは?
>

割り込みすいません。
本当にそうなのでしょうか。

> 一度別の変数で参照してから

意味ない気がします。
引用返信 編集キー/
■4574 / inTopicNo.7)  Re[4]: 画像のクリアについて
□投稿者/ 特攻隊長まるるう (67回)-(2007/06/19(Tue) 09:13:19)
2007/06/19(Tue) 09:14:18 編集(投稿者)

No4562 (未記入 さん) に返信
> ここを見て、Nothingの意味を理解していないのではないかと老婆心ながらに思いました。
変数には値型と参照型があって
[Visual Basic 中学校 初級講座 第34回 値型と参照型]
http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard34.htm

オブジェクトを格納する変数はすべて参照型です。
Nothing のヘルプを見ると、
[Nothing (MSDN)]
http://msdn2.microsoft.com/ja-jp/library/0x9tb07z(VS.80).aspx
>キーワード Nothing をオブジェクト変数に代入すると、その変数は
>どのオブジェクト インスタンスも参照しなくなります。
画像(Image)もオブジェクトなので、参照をやめれば既定値(初期状態)
に戻ります。

Visual Basic 中学校さんで初級講座に分類されているように、
プログラマの知識としては基礎に近いもので、しかも実際の動作に
関わってくる重要な知識です。

解決済み
引用返信 編集キー/
■4575 / inTopicNo.8)  Re[5]: 画像のクリアについて
□投稿者/ 管理人 (2回)-(2007/06/19(Tue) 09:46:05)
管理人 さんの Web サイト
メモリの使用量云々とは関係なく>YASさん
me.pictureBox1.Image.Dispose()
me.pictureBox1.Image = Nothing
としてください。

リソースリークしますよ。
引用返信 編集キー/
■4576 / inTopicNo.9)  Re[5]: 画像のクリアについて
□投稿者/ 美流久 (21回)-(2007/06/19(Tue) 10:03:46)
No4574 (特攻隊長まるるう さん) に返信
> 2007/06/19(Tue) 09:14:18 編集(投稿者)
>
> ■No4562 (未記入 さん) に返信
>>ここを見て、Nothingの意味を理解していないのではないかと老婆心ながらに思いました。
> 変数には値型と参照型があって
> [Visual Basic 中学校 初級講座 第34回 値型と参照型]
> http://homepage1.nifty.com/rucio/main/dotnet/shokyu/standard34.htm
>
> オブジェクトを格納する変数はすべて参照型です。
> Nothing のヘルプを見ると、
> [Nothing (MSDN)]
> http://msdn2.microsoft.com/ja-jp/library/0x9tb07z(VS.80).aspx
> >キーワード Nothing をオブジェクト変数に代入すると、その変数は
> >どのオブジェクト インスタンスも参照しなくなります。
> 画像(Image)もオブジェクトなので、参照をやめれば既定値(初期状態)
> に戻ります。
>
> Visual Basic 中学校さんで初級講座に分類されているように、
> プログラマの知識としては基礎に近いもので、しかも実際の動作に
> 関わってくる重要な知識です。
>

まるるうさん詳しくありがとうございます。
値型、参照型をちゃんと理解出来ていないのが現状ですorz

> プログラマの知識としては基礎に近いもので、しかも実際の動作に
> 関わってくる重要な知識です。

基礎が分かっていないと言うことですね。。
上のサイトなどを参考に勉強してきます☆
ありがとうございます

解決済み
引用返信 編集キー/
■4581 / inTopicNo.10)  Re[6]: 画像のクリアについて
□投稿者/ まさる (8回)-(2007/06/19(Tue) 11:10:34)
No4576 (美流久 さん) に返信
> 基礎が分かっていないと言うことですね。。
> 上のサイトなどを参考に勉強してきます☆
> ありがとうございます

値型と参照型の勉強をするなら、「わんくま同盟 東京勉強会#8」
(http://www.wankuma.com/seminar/20070602tokyo8/Default.aspx)
のセッション

 「しってるつもり?値型と参照型〜メモリー図ですべて解決」 by 刈歩 菜良

がお勧めですよ(^ ^
解決済み
引用返信 編集キー/
■4582 / inTopicNo.11)  Re[6]: 画像のクリアについて
□投稿者/ 特攻隊長まるるう (68回)-(2007/06/19(Tue) 11:47:54)
2007/06/19(Tue) 11:57:33 編集(投稿者)

No4575 (管理人 さん) に返信
> me.pictureBox1.Image.Dispose()
> me.pictureBox1.Image = Nothing
> としてください。
>
> リソースリークしますよ。

Dispose() !してなかったかも。。。(汗
Graphics 関係を使うときは注意していましたが、
Image 使わないからなぁ。。。

> 美流久さん
Dispose() しておいた方が良いようですよ?

オブジェクトの破棄(Dispose メソッドの実行の場合が多い)も
そのうち勉強してください。(^^;
[@IT:.NET TIPS 確実な終了処理を行うには? - C#]
http://www.atmarkit.co.jp/fdotnet/dotnettips/027dispose/dispose.html
# そこまでくると、
# [オブジェクトの破棄を保証する]
# http://jeanne.wankuma.com/tips/programing/dispose.html
# に話がつながったりして終わらなくなるのでw説明はこの辺で
# 切ります。また、別の質問で必要だったらその時にでも。。。

> 基礎が分かっていないと言うことですね。。
基礎的なんだけど奥が深い部分でもあります。あせらず覚えていってください。

解決済み
引用返信 編集キー/
■4584 / inTopicNo.12)  Re[5]: 画像のクリアについて
□投稿者/ 渋木宏明(ひどり) (236回)-(2007/06/19(Tue) 12:10:38)
渋木宏明(ひどり) さんの Web サイト
> 画像(Image)もオブジェクトなので、参照をやめれば既定値(初期状態)
> に戻ります。

念のため補足しておくと、「null (Nothing) を突っ込むと初期状態に戻る」のは「PictureBox.Image プロパティに固有の仕様」です。

「null を突っ込めば初期状態に戻る」ような実装がなされていることはしばしば見られますが、「慣例」であって、規約とかではないので、常にそうなる保証はありません。

「実際にどうなるか」は、ヘルプなどの情報によって別途確認する必要があります。



引用返信 編集キー/
■4586 / inTopicNo.13)  Re[6]: 画像のクリアについて
□投稿者/ 美流久 (22回)-(2007/06/19(Tue) 13:05:29)
No4584 (渋木宏明(ひどり) さん) に返信
>>画像(Image)もオブジェクトなので、参照をやめれば既定値(初期状態)
>>に戻ります。
>
> 念のため補足しておくと、「null (Nothing) を突っ込むと初期状態に戻る」のは「PictureBox.Image プロパティに固有の仕様」です。
>
> 「null を突っ込めば初期状態に戻る」ような実装がなされていることはしばしば見られますが、「慣例」であって、規約とかではないので、常にそうなる保証はありません。
>
> 「実際にどうなるか」は、ヘルプなどの情報によって別途確認する必要があります。
>
>
>

ひどりさんありがとうございます。
だからですかー。。。さっきnothingいれたのにどうしても初期化になるのとならない場合が出てしまいました。

まるるうさん、まさるさん 参考HPありがとうございます。
勉強に役立たさせてもらいます。

解決済み
引用返信 編集キー/
■4600 / inTopicNo.14)  Re[6]: 画像のクリアについて
□投稿者/ YAS (6回)-(2007/06/19(Tue) 22:05:45)
2007/06/19(Tue) 22:06:33 編集(投稿者)
No4575 (管理人 さん) に返信
> メモリの使用量云々とは関係なく>YASさん
> me.pictureBox1.Image.Dispose()
> me.pictureBox1.Image = Nothing
> としてください。
> 
> リソースリークしますよ。

Me.PictureBox1.Image = Nothingだけで
ガベージコレクションが適当に消してくれると思っていました。

わたしはいつもできだけ早くメモリから消えて欲しいと思って,

        Dim Temp As Image
        Temp = Me.PictureBox1.Image
        Me.PictureBox1.Image = Nothing
        If Temp IsNot Nothing Then
            Temp.Dispose()
        End If

とやっていたのですが,考えてみれば一時変数に代入する必要はなかったですね。
ずっと前に自分なりに考えたコードだったのですが,なんでこうしたのか
思い出せません...

引用返信 編集キー/
■4601 / inTopicNo.15)  Re[7]: 画像のクリアについて
□投稿者/ 中博俊 (1099回)-(2007/06/19(Tue) 22:13:27)
中博俊 さんの Web サイト
BITMAPハンドルかかえて、おなくなりになれます。(^^;;
引用返信 編集キー/
■4602 / inTopicNo.16)  Re[8]: 画像のクリアについて
□投稿者/ YAS (7回)-(2007/06/19(Tue) 22:54:24)
No4601 (中博俊 さん) に返信
> BITMAPハンドルかかえて、おなくなりになれます。(^^;;

確かに。Temp = Nothing が必要ですね。

ただ,前述のようなコードにした理由を前の資料をほじくり返して思い出せました!

Me.PictureBox1.Image.Dispose()

Me.PictureBox1.Image = Nothing

の間に,もしも画面を再描画するような事態になったら例外で落ちるかもと思って
別の変数に移してからDisposeするようにしたのでした。

実際にMe.PictureBox1.Image.Dispose()しただけだと当然ですが,ウィンドウの再描画で例外が発生します。

Me.PictureBox1.Image.Dispose()
Me.PictureBox1.Image = Nothing

と2つつなげば絶対に例外は発生しないのでしょうか?
引用返信 編集キー/
■4605 / inTopicNo.17)  Re[9]: 画像のクリアについて
□投稿者/ 中博俊 (1100回)-(2007/06/20(Wed) 01:03:07)
中博俊 さんの Web サイト
>Me.PictureBox1.Image.Dispose()
>Me.PictureBox1.Image = Nothing

マルチスレッドじゃなきゃ大丈夫だけど、マルチスレッドならだめですわね。
普通のDisposeのお行儀と同じです。
入れ替えてからDisposeしてもいいし。

別に

>        Dim Temp As Image
>        Temp = Me.PictureBox1.Image
>        Me.PictureBox1.Image = Nothing
>        If Temp IsNot Nothing Then
>            Temp.Dispose()
>        End If

間違ってるわけじゃないし。

引用返信 編集キー/
■4606 / inTopicNo.18)  Re[10]: 画像のクリアについて
□投稿者/ YAS (8回)-(2007/06/20(Wed) 01:34:13)
中博俊さん,ご教授いただきありがとうございました。

美流久さん,途中で割り込んで申し訳ありませんでした。


美流久さんが,4586で解決済みとなさっているので,解決済みをチェックしておきます。

解決済み
引用返信 編集キー/
■4608 / inTopicNo.19)  Re[11]: 画像のクリアについて
□投稿者/ 囚人 (107回)-(2007/06/20(Wed) 13:58:45)
空気読めていない発言しちゃいますけど、

PictureBox.Image

は、Dispose しなくても BITMAP のハンドルぐらい放置(GC 任せ)でよくないですか?
どっかで誰かが

Image i = pictureBox.Image

とかして、使ってるかも知れないし。
引用返信 編集キー/
■4611 / inTopicNo.20)  Re[12]: 画像のクリアについて
 
□投稿者/ 渋木宏明(ひどり) (237回)-(2007/06/20(Wed) 15:45:50)
渋木宏明(ひどり) さんの Web サイト
> どっかで誰かが
>
> Image i = pictureBox.Image
>
> とかして、使ってるかも知れないし。

可能性はあるけど、それ前提でやってたら Dispose() も using もまるで出来なくなっちゃいますぜ。

どうしても共有しているかどうか不明なものについては仕方ないとしても、自分で管理可能なものについては極力管理する努力をするべきです。



引用返信 編集キー/

次の20件>
トピック内ページ移動 / << 0 | 1 >>

管理者用

- Child Tree -