- - PR -
C#: FormをまたがったNetworkStreamのClose
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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を閉じられるでしょうか。 | ||||
|
投稿日時: 2009-02-05 19:26
まず表現の訂正を。
Formをまたがった →Classをまたがった 変数nsはクラスForm1のpublicなプロパティです。 そのため、この変数にアクセスするには Form1のインスタンス.ns とする必要があります。 オブジェクト指向は難しいと思いますが 使いこなすと判りやすいです。 | ||||
|
投稿日時: 2009-02-05 20:09
あすかさん、どうもありがとうございます。大変ありがたいです。
Form1のインスタンスで Form1.ns.Close(); としたところ、今度は 「静的でないフィールド、メソッド、またはプロパティ '(namespace名).Form1.ns'で オブジェクト参照が必要です」 というエラーが... これはどのような意味なのでしょうか。 | ||||
|
投稿日時: 2009-02-05 20:38
Form1 はクラス名で、インスタンス名ではありません。
Form2 を、どの様に表示していますか?Form2 で、Yes か No をクリックしたあと、Form1 はどうなるのでしょうか? Form2 の呼び出しを ShowModal で行っているなら、その後に Close すればいいでしょう。 つか、先にオブジェクト指向プログラミングの勉強をした方がいいかも。 | ||||
|
投稿日時: 2009-02-05 21:03
こんにちは。
Form2でCloseさせる理由は何ですか? YESの判定が欲しいのですか? | ||||
|
投稿日時: 2009-02-06 10:05
はい、Form1のコンストラクタでGetStreamし、 Form1のさまざまなコントロール操作で 設定コマンドを接続先に送信します。 Form1の「終了」ボタンはアプリの終了ボタンで これを押下即終了にすると誤押下の場合問題なので Form2を加えて、本当に終了するかを「Yes」「No」 確認します。 そして「Yes」の場合、 NetworkStreamとTcpClientを閉じて アプリを終了。 という流れを考えています。 | ||||
|
投稿日時: 2009-02-06 10:27
初心者に付合わせて済みません。勉強そこそこで実践のコーディングに突入しており、 みなさんの助言本当にありがたく思います。 戦々恐々で質問ですが、Form1のインスタンス名はどこから分かるでしょうか... (MainでApplication.Run(new Form1());と作成しています。) Form2はForm1の終了ボタンが押下された際 Form2 fm2 = new Form2(); と作成しています。 Form2で「Yes」ボタン押下の際 NetstreamとTcpClientを終了し(←ここで今問題に) Application.Exit(); しています。 「ShowModal」という形にはしていないと思います。 いかがでしょうか。 | ||||
|
投稿日時: 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()) { // ソケットをクローズする } } |