1

簡単なc#アプリケーションを作成しようとしています(c#を初めて試したので、親切にしてください)。「認証コード」をキャプチャするためのテキストボックスを含むフォームを作成しました。これは検証され、Webクライアントはこの認証コードをリクエストに渡すxmlファイルをフェッチします。返送されたデータは解析されます

私がやりたいのは、xmlが戻ってきて、それがすべて正常であることを確認するためにチェックを行った後です。最初のフォームを閉じて2番目のフォームをロードし、xmlデータをきれいな形式で表示するために必要なフォームコンポーネントをプログラムで追加します。

私の問題は、2番目のフォームを開いたままにすることができないことです(2番目のフォームを間違った方法で呼び出すことは間違いありません)。これが私が持っているものです:

// close current form
this.Close();

//open new form
xmlViewForm xmlView = new xmlViewForm();
xmlView.Show();

あなたは今までに私が犯した間違いを見つけたと確信しています。しかし、完全を期すために明白なことを述べるために、最初のフォームを閉じ、2番目のフォームを開き、すぐにプログラムを終了します(2番目のフォームは明らかに1秒間点滅します)。

私はいくつかのことを試しましたが、どれも機能しません(Application.Run(new xmlViewForm());クラスをインスタンス化する代わりに使用してshow()メソッドを使用することを含みます。明らかにそれが機能しないことを知っています、そして今私も機能しますが、c#をリモートで十分に理解していませんが理由を。

助けてくれてありがとう:)

4

2 に答える 2

5

最初に頭に浮かんだのは、電話などで開いたフォームを閉じているということですApplication.Run(new MyForm())。この形式には特別な意味があります。これはアプリケーションの「メインフォーム」であり、閉じると、開いている他のウィンドウの数に関係なく、ユーザーがプログラム全体を閉じたいことをアプリケーションに通知します。

2つの可能な修正があります。まず、最も簡単なのは、Close()を呼び出す代わりに、表示したくないフォームをHide()することです。見えませんが、まだ実行中なので、アプリケーションは閉じません。

2番目の解決策は、監視するメインフォームを指定して作成される「デフォルトコンテキスト」の代わりに実行する必要があるカスタム「アプリケーションコンテキスト」を定義することです。これを行うには、System.Windows.Forms.ApplicationContextからカスタムクラスを派生させます。このコンテキストを指定すると、メインフォームのクローズ以外の何かに基づいて、アプリケーションの終了を制御するために使用できます。2つの「メインフォーム」を起動し、両方がまだアクティブであるかどうかを追跡するサンプルコードは、クラスのMSDNページにあります。。メインフォームにLoadハンドラーとCloseハンドラーを指定し、メインフォームがインスタンス化するときにそれらを子フォームに渡して、「開いている」フォームの数を保持し、その数が零。childForm.Show()beforeを呼び出してメインフォームを閉じる前に、子フォームが読み込まれることを確認してthis.Close()ください。

于 2012-09-04T22:13:10.763 に答える
4

メインフォームを閉じた後、2番目のフォームを開くことはできません。

これを行う:

//open new form
xmlViewForm xmlView = new xmlViewForm();
xmlView.Show();

// hide current form
this.Hide();

親フォームであるため、メインフォームを閉じることはできません。メインフォームを閉じると、子フォームは表示されません。

Program.csまたは、ファイルを編集してxmlViewFormをメインフォームに変更します

Application.Run(new XmlViewForm());

そうすれば、ロード時に最初に他のフォームを簡単に呼び出して、好きなように閉じることができます。

private void XmlViewForm_Load(o, s)
{
    // hide current form, and this will remain hidden until the other form is done with it's work
    this.Hide();

    //open the other form
    TheOtherForm _theOtherForm = new TheOtherForm();
    _theOtherForm.Show();

}

private void TheOtherForm_Closed(o, s)
{
    // show current form
    this.Show;

}
于 2012-09-04T22:08:13.057 に答える