0

Form1(メインフォーム)とForm2の2つのフォームがあります。Form 1 は画像ファイル、pdf 変換などを表示します。ただし、ユーザーが Zip ファイルを表示したい場合は、Form2 が呼び出され、listView で利用可能なすべての Zip ファイルのプレビューが表示されます。ユーザーが Form2 で特定の Zip ファイルを選択すると、ファイルが解凍され、画像ファイルが Form2 に送信されます。しかし、Form1 から Form2 を更新する方法がわかりません。ところで、Form2 のすべての画像が Form の変数リストに表示されるようになりました。表示されますが、フォームは更新されませんでした。

form2 コード:

 private void btn_read_Click(object sender, EventArgs e)
    {

        Form1 f1 = new Form1();
        f1.ReadArchives(Filepath);  //this function creates the image files on Form1
       this.Close(); //close form2

       for (int index = Application.OpenForms.Count - 1; index >= 0; index--)
        {
            if (Application.OpenForms[index].Name == "Form1")
            {
                //Application.OpenForms[index].Close();//EFFECTIVE BUT CLOSES THE WHOLE APPLICATION
               Application.OpenForms[index].Invalidate(); //no effect
                 Application.OpenForms[index].Refresh();//no effect
                Application.OpenForms[index].Update();//no effect
                Application.OpenForms[index].Show();//no effect
            }
        }            

    }
4

2 に答える 2

0

したがって、子フォームで何かが発生したときに親フォームに何かをさせたい場合、適切なメカニズムはイベントを使用することです。FormClosedこの場合、情報を渡したいときに子フォームが閉じられるので、イベントを再利用できます。

これにより、子フォームの記述が非常に簡単になります。

public partial class Form2 : Form
{
    public string Filepath {get;set;}

    private void btn_read_Click(object sender, EventArgs e)
    {
        Close();
    }
}

親フォームは、適切なイベントを使用して残りを処理できます。

public partial class Form1 : Form
{
    private void button1_Click(object sender, EventArgs args)
    {
        Form2 child = new Form2();
        child.FormClosing += (_, arg) => ReadArchives(child.Filepath);
        child.Show();
    }

    private void ReadArchives(string filepath)
    {
        throw new NotImplementedException();
    }
}
于 2013-02-25T17:17:38.863 に答える
0

Form1コードでnew をインスタンス化しています。これは、既に持っている (main)と異なります。Form1これが、フォームが更新されない理由です。

私の答えでは、さまざまなフォーム間で変数/オブジェクトを共有するためのイベントベースのアプローチを示しています。オブジェクトのコレクションを送信するように簡単に調整できます。それが役に立てば幸い。

于 2013-02-25T17:00:41.860 に答える