- PR -

C#: FormをまたがったNetworkStreamのClose

投稿者投稿内容
雪ふくろう
会議室デビュー日: 2009/01/27
投稿数: 11
投稿日時: 2009-02-05 18:51
C#初心者で稚拙な質問と思いますがよろしくお願いします。

Form1で作成し.GetstreamしたNetworkstream ns
(public NetworkStream ns;)
があります。これを
Form1にある終了ボタンを押したときに立ち上がる
Form2のyesボタンが押されたときにClose
(ns.Close();)
すると、
「名前'cs'は現在のコンテキスト内に存在しません。」
とエラーになります。
Form1も2も同じnamespace内なので
publicとすれば共有できると思ったのですが、
間違いがあるようです。
どうすればForm2でNetworkStreamを閉じられるでしょうか。
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2009-02-05 19:26
まず表現の訂正を。

Formをまたがった
→Classをまたがった

変数nsはクラスForm1のpublicなプロパティです。
そのため、この変数にアクセスするには
Form1のインスタンス.ns
とする必要があります。

オブジェクト指向は難しいと思いますが
使いこなすと判りやすいです。
雪ふくろう
会議室デビュー日: 2009/01/27
投稿数: 11
投稿日時: 2009-02-05 20:09
あすかさん、どうもありがとうございます。大変ありがたいです。
Form1のインスタンスで
Form1.ns.Close();
としたところ、今度は
「静的でないフィールド、メソッド、またはプロパティ
 '(namespace名).Form1.ns'で
 オブジェクト参照が必要です」
というエラーが...
これはどのような意味なのでしょうか。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2009-02-05 20:38
Form1 はクラス名で、インスタンス名ではありません。

Form2 を、どの様に表示していますか?Form2 で、Yes か No をクリックしたあと、Form1 はどうなるのでしょうか?

Form2 の呼び出しを ShowModal で行っているなら、その後に Close すればいいでしょう。



つか、先にオブジェクト指向プログラミングの勉強をした方がいいかも。
ヴァン
常連さん
会議室デビュー日: 2008/03/04
投稿数: 28
投稿日時: 2009-02-05 21:03
こんにちは。

Form2でCloseさせる理由は何ですか?

YESの判定が欲しいのですか?
雪ふくろう
会議室デビュー日: 2009/01/27
投稿数: 11
投稿日時: 2009-02-06 10:05
引用:

ヴァンさんの書き込み (2009-02-05 21:03) より:
こんにちは。

Form2でCloseさせる理由は何ですか?

YESの判定が欲しいのですか?


はい、Form1のコンストラクタでGetStreamし、
Form1のさまざまなコントロール操作で
設定コマンドを接続先に送信します。
Form1の「終了」ボタンはアプリの終了ボタンで
これを押下即終了にすると誤押下の場合問題なので
Form2を加えて、本当に終了するかを「Yes」「No」
確認します。
そして「Yes」の場合、
NetworkStreamとTcpClientを閉じて
アプリを終了。
という流れを考えています。


雪ふくろう
会議室デビュー日: 2009/01/27
投稿数: 11
投稿日時: 2009-02-06 10:27
引用:

Jittaさんの書き込み (2009-02-05 20:38) より:
Form1 はクラス名で、インスタンス名ではありません。

Form2 を、どの様に表示していますか?Form2 で、Yes か No をクリックしたあと、Form1 はどうなるのでしょうか?

Form2 の呼び出しを ShowModal で行っているなら、その後に Close すればいいでしょう。

つか、先にオブジェクト指向プログラミングの勉強をした方がいいかも。



初心者に付合わせて済みません。勉強そこそこで実践のコーディングに突入しており、
みなさんの助言本当にありがたく思います。

戦々恐々で質問ですが、Form1のインスタンス名はどこから分かるでしょうか...
(MainでApplication.Run(new Form1());と作成しています。)

Form2はForm1の終了ボタンが押下された際
Form2 fm2 = new Form2();
と作成しています。
Form2で「Yes」ボタン押下の際
NetstreamとTcpClientを終了し(←ここで今問題に)
Application.Exit();
しています。

「ShowModal」という形にはしていないと思います。

いかがでしょうか。
せっきー
会議室デビュー日: 2006/10/16
投稿数: 3
お住まい・勤務地: 神田
投稿日時: 2009-02-06 10:29
Form1の終了ボタンClickイベント内で、
Form2をShowDialog()し戻り値がOKだったらCloseする
という流れで問題ないと思いますが。。。
ShuryoButton_Click(object sender, EventArgs e){
Form2 formYesNo = new Form2();
if (DialogResult.OK == formYesNo.ShowDialog()) {
// ソケットをクローズする
}
}

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