0

我有两个表单,Form1(主表单)和 Form2。Form 1 显示图像文件、pdf 转换等。但如果用户想要查看 Zip 文件,则调用 Form2 显示 listView 上所有可用 Zip 文件的预览。如果用户在 Form2 上选择一个特定的 Zip 文件,该文件将被解压缩并将图像文件发送到 Form2。但我不知道如何从 Form1 刷新 Form2。顺便说一句,Form2 中的所有图像现在都出现在 Form 的变量列表中!要显示,但表单没有更新。

表格2代码:

 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

您正在代码中实例化 new Form1- 这Form1您已经拥有的 (main) 不同。这就是表单没有更新的原因。

在我的回答中,我展示了基于事件的方法来在不同形式之间共享变量/对象 - 它可以轻松调整以传输对象集合。希望能帮助到你。

于 2013-02-25T17:00:41.860 回答
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 回答