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

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

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

Re[8]: インスタンスが生成されているか判断するには?


(過去ログ 28 を表示中)

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

■12644 / inTopicNo.1)  インスタンスが生成されているか判断するには?
  
□投稿者/ のぶ (4回)-(2008/01/13(Sun) 23:06:54)

分類:[.NET 全般] 

質問ばかりですみません。

C#2005 でインスタンスが生成されているかどうかを判断するには
どのようにすればよいでしょうか?

具体的にいうと、検索画面をモードレスで表示します。
親画面で検索画面が閉じられているときは、インスタンスを生成した後に
検索画面を表示し、既に表示されているときは、検索画面をアクティブに
するといった動作をさせたいです。

検索画面の変数はモジュールレベル(これってVBの言い方なのかな・・・)
で持っており、画面を閉じるときは Close メソッドにより画面を閉じています。

Close の後は 検索画面 == null で判定できると思ってたら出来ないんですね・・・orz

よろしくお願いします。

引用返信 編集キー/
■12645 / inTopicNo.2)  Re[1]: インスタンスが生成されているか判断するには?
□投稿者/ ダッチ (184回)-(2008/01/13(Sun) 23:17:46)
のぶ さん、こんにちは
ダッチです。

Close メソッドの後に検索画面の変数に null を入れれば、
検索画面 == null で判定できるのではないでしょうか。

または、Close メソッドを呼ぶとフォームは破棄されるため、
Control.IsDisposed プロパティで判断できると思います。

引用返信 編集キー/
■12647 / inTopicNo.3)  Re[2]: インスタンスが生成されているか判断するには?
□投稿者/ 渋木宏明(ひどり) (627回)-(2008/01/13(Sun) 23:44:24)
渋木宏明(ひどり) さんの Web サイト
Close() しないで、Visible = true/false で制御するのが楽なんじゃないですか?

引用返信 編集キー/
■12680 / inTopicNo.4)  Re[2]: インスタンスが生成されているか判断するには?
□投稿者/ のぶ (5回)-(2008/01/15(Tue) 00:31:59)
No12645 (ダッチ さん) に返信
> のぶ さん、こんにちは
> ダッチです。
>
> Close メソッドの後に検索画面の変数に null を入れれば、
> 検索画面 == null で判定できるのではないでしょうか。
>
> または、Close メソッドを呼ぶとフォームは破棄されるため、
> Control.IsDisposed プロパティで判断できると思います。

返信ありがとうございます。

Control.IsDisposed ってどうやったら使えるんでしょうか?(^^;;
オブジェクトブラウザを見ると、確かに

public bool IsDisposed { get; }
System.Windows.Forms.Control のメンバ

となってますが、ピリオドを打っても出てきません・・・
いまいちオブジェクトブラウザの見方がわかりません。
引用返信 編集キー/
■12681 / inTopicNo.5)  Re[3]: インスタンスが生成されているか判断するには?
□投稿者/ のぶ (6回)-(2008/01/15(Tue) 00:41:34)
No12647 (渋木宏明(ひどり) さん) に返信
> Close() しないで、Visible = true/false で制御するのが楽なんじゃないですか?

返信ありがとうございます。

その方法も考えてたんですが、画面表示時に1度だけ行いたい処理があって、
Shownイベントを使ってたんですけど、Visible の変更だけだ Shown イベントが
発生してくれないんです・・・orz

引用返信 編集キー/
■12683 / inTopicNo.6)  Re[4]: インスタンスが生成されているか判断するには?
□投稿者/ 渋木宏明(ひどり) (630回)-(2008/01/15(Tue) 01:17:24)
渋木宏明(ひどり) さんの Web サイト
> その方法も考えてたんですが、画面表示時に1度だけ行いたい処理があって、
> Shownイベントを使ってたんですけど、Visible の変更だけだ Shown イベントが
> 発生してくれないんです・・・orz

メンバ変数でフラグを1個持てば済む話じゃないですか?
引用返信 編集キー/
■12690 / inTopicNo.7)  Re[4]: インスタンスが生成されているか判断するには?
□投稿者/ シャノン (250回)-(2008/01/15(Tue) 10:39:34)
No12681 (のぶ さん) に返信
> ■No12647 (渋木宏明(ひどり) さん) に返信
>>Close() しないで、Visible = true/false で制御するのが楽なんじゃないですか?
>
> 返信ありがとうございます。
>
> その方法も考えてたんですが、画面表示時に1度だけ行いたい処理があって、
> Shownイベントを使ってたんですけど、Visible の変更だけだ Shown イベントが
> 発生してくれないんです・・・orz

Form.Shown
http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.form.shown(VS.80).aspx

> フォームが初めて表示されるたびに発生します。

なんか変な日本語。

それはそれとして、VisibleChanged で代用とか。
引用返信 編集キー/
■12694 / inTopicNo.8)  Re[3]: インスタンスが生成されているか判断するには?
□投稿者/ ダッチ (185回)-(2008/01/15(Tue) 12:37:20)
> Control.IsDisposed ってどうやったら使えるんでしょうか?(^^;;
> オブジェクトブラウザを見ると、確かに 
> 
> public bool IsDisposed { get; }
> System.Windows.Forms.Control のメンバ
> 
> となってますが、ピリオドを打っても出てきません・・・
> いまいちオブジェクトブラウザの見方がわかりません。
IsDisposed は Control のメンバですが、
Form は Control を継承していますので
Form も IsDisposed プロパティを持っています。

使う時はこのような感じにすればいいと思います。
このコードはフォームのコードです。

    if (this == null || this.IsDisposed == true)
    {
        // インスタンスが未生成か、フォームが閉じられている(破棄されている)ときの処理
    }

たぶん this の後にピリオドを打つと IsDisposed プロパティが見えると思います。
(環境が無いので試していません)

引用返信 編集キー/
■12872 / inTopicNo.9)  Re[5]: インスタンスが生成されているか判断するには?
□投稿者/ のぶ (7回)-(2008/01/19(Sat) 03:03:32)
No12683 (渋木宏明(ひどり) さん) に返信
>>その方法も考えてたんですが、画面表示時に1度だけ行いたい処理があって、
>>Shownイベントを使ってたんですけど、Visible の変更だけだ Shown イベントが
>>発生してくれないんです・・・orz
>
> メンバ変数でフラグを1個持てば済む話じゃないですか?

コメントありがとうございます。
確かにその通りなんですけど、なるたけフラグは使いたくないなぁ、、
なんて思いまして。。。

でも、Visible=true にしたときにイベント出してくれたらうれしかったのになぁ・・・

ありがとうございました。

引用返信 編集キー/
■12873 / inTopicNo.10)  Re[4]: インスタンスが生成されているか判断するには?
□投稿者/ のぶ (8回)-(2008/01/19(Sat) 03:19:17)
No12694 (ダッチ さん) に返信
> IsDisposed は Control のメンバですが、
> Form は Control を継承していますので
> Form も IsDisposed プロパティを持っています。
>
> 使う時はこのような感じにすればいいと思います。
> このコードはフォームのコードです。
>
> if (this == null || this.IsDisposed == true)
> {
> // インスタンスが未生成か、フォームが閉じられている(破棄されている)ときの処理
> }
>
> たぶん this の後にピリオドを打つと IsDisposed プロパティが見えると思います。
> (環境が無いので試していません)

残念ながら、ピリオドを打っても出てこないんです・・・orz
使えないのかと思いきや、、、コンパイルは通りました!
たまに、ピリオドうっても一覧に出てこないプロパティーありますよねぇ・・・

あ、ちなみに C#2008(Express)でやると IsDisposed はピリオド打つと出てきました。
framework2.0 に対応していればC#2008使うんだけどなぁ。

ありがとうございました。

引用返信 編集キー/
■12874 / inTopicNo.11)  Re[5]: インスタンスが生成されているか判断するには?
□投稿者/ のぶ (9回)-(2008/01/19(Sat) 03:27:26)
No12690 (シャノン さん) に返信
> それはそれとして、VisibleChanged で代用とか。
実は今そのイベントを使ってやっているところでありました。
ただ、私個人的には IsDisposed が一番しっくりくる感じなので
それに直そうと思ってます。

ありがとうございました。

引用返信 編集キー/
■12876 / inTopicNo.12)  Re[5]: インスタンスが生成されているか判断するには?
□投稿者/ ダッチ (186回)-(2008/01/19(Sat) 10:59:04)
> 残念ながら、ピリオドを打っても出てこないんです・・・orz
あれ、そうですか? おかしいですね。
今 Visual Studio 2005 で確認したら出てきましたよ。

> 使えないのかと思いきや、、、コンパイルは通りました!
> たまに、ピリオドうっても一覧に出てこないプロパティーありますよねぇ・・・
ありますね。

> あ、ちなみに C#2008(Express)でやると IsDisposed はピリオド打つと出てきました。
> framework2.0 に対応していればC#2008使うんだけどなぁ。
C# 2008 というか Visual Studio 2008 では複数の .NET Framework に対応しています。
その中には 2.0 3.0 3.5 が含まれます。(SP は記載していません。)

たぶん既定の状態では 3.5 を対象にしているはずです。
[プロジェクトのプロパティ]からバージョンを切り替えられます。
こちらを参考にしてみてください。

Visual C# 2008 Express Editionのマルチターゲット機能
http://blogs.wankuma.com/fnya/archive/2008/01/14/117371.aspx

引用返信 編集キー/
■12921 / inTopicNo.13)  Re[6]: インスタンスが生成されているか判断するには?
□投稿者/ のぶ (10回)-(2008/01/21(Mon) 02:27:36)
No12876 (ダッチ さん) に返信
>>残念ながら、ピリオドを打っても出てこないんです・・・orz
> あれ、そうですか? おかしいですね。
> 今 Visual Studio 2005 で確認したら出てきましたよ。
えっ?なんで私の環境ではみえないんでしょうか・・・
一覧に出てこないので、特殊な方法で使うのだと思っておりました。(^^;

>>使えないのかと思いきや、、、コンパイルは通りました!
>>たまに、ピリオドうっても一覧に出てこないプロパティーありますよねぇ・・・
> ありますね。
なんでオブジェクトブラウザに出てくるのに使えないのかとハマルこともしばしば・・・
Control.Focus も一覧に出てこなかったので
ずっと OwnerControl.ActiveControl = Control ってやってました。orz

>>あ、ちなみに C#2008(Express)でやると IsDisposed はピリオド打つと出てきました。
>>framework2.0 に対応していればC#2008使うんだけどなぁ。
> C# 2008 というか Visual Studio 2008 では複数の .NET Framework に対応しています。
> その中には 2.0 3.0 3.5 が含まれます。(SP は記載していません。)
あっ。本当だ。。
はじめのテンプレートを選ぶ画面で、プラットフォームを選ぶコンボボックスが出てこないので
「Expressでは選べないのか!」って思ってました。

早速C#2008を使って開発するようにしています。

ありがとうございました。

引用返信 編集キー/
■12925 / inTopicNo.14)  Re[7]: インスタンスが生成されているか判断するには?
□投稿者/ 魔界の仮面弁士 (587回)-(2008/01/21(Mon) 04:08:34)
No12921 (のぶ さん) に返信
>>>> たぶん this の後にピリオドを打つと IsDisposed プロパティが見えると思います。
>>> 残念ながら、ピリオドを打っても出てこないんです・・・orz
>> あれ、そうですか? おかしいですね。
>> 今 Visual Studio 2005 で確認したら出てきましたよ。
> えっ?なんで私の環境ではみえないんでしょうか・・・
> 一覧に出てこないので、特殊な方法で使うのだと思っておりました。(^^;

[ツール]-[オプション]メニューを開き、
 テキスト エディタ
 └C#
  └全般 - 入力候補 - メンバの詳細を非表示
のチェックボックスが on になっていると、IsDisposed は表示されません。
引用返信 編集キー/
■13050 / inTopicNo.15)  Re[8]: インスタンスが生成されているか判断するには?
□投稿者/ のぶ (11回)-(2008/01/23(Wed) 21:18:49)
No12925 (魔界の仮面弁士 さん) に返信
> ■No12921 (のぶ さん) に返信
> >>>> たぶん this の後にピリオドを打つと IsDisposed プロパティが見えると思います。
> >>> 残念ながら、ピリオドを打っても出てこないんです・・・orz
> >> あれ、そうですか? おかしいですね。
> >> 今 Visual Studio 2005 で確認したら出てきましたよ。
>>えっ?なんで私の環境ではみえないんでしょうか・・・
>>一覧に出てこないので、特殊な方法で使うのだと思っておりました。(^^;
>
> [ツール]-[オプション]メニューを開き、
>  テキスト エディタ
>  └C#
>   └全般 - 入力候補 - メンバの詳細を非表示
> のチェックボックスが on になっていると、IsDisposed は表示されません。

!!
こんなところに、こんなオプションがあったんですね。。
デフォルトでチェックがついているなんて・・・知りませんでした。
ありがとうございます。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -