如何从DialogBox中更改Form1中的内容?

时间:2011-05-24 04:07:09

标签: c# winforms image forms picturebox

假设我有两种形式(Form1和Form2)。

  • Form1有一个PictureBox
  • Form2我有一个OpenFileDialog

Form1是主窗体,所以当我运行项目时,我看到Form1。

如何从Form2更改Form1中PictureBox中的图像?

5 个答案:

答案 0 :(得分:2)

How do I pass a value from a child back to the parent form?

基本上,使用某些属性公开在打开文件对话框中返回的值,并让父表单抓住它。

答案 1 :(得分:2)

将一个表单作为参数传递给第二个表单的构造函数,或者添加传递引用的方法。在您引用表单后,您可以使用from来执行任何操作。

是否以公共会员身份分享图片框取决于您。但是,我建议以第一种形式制作公共方法SetImage()。第二种形式会调用form1.SetImage()

<强> [更新]

等等,为什么需要从OpenFileDialog设置图像,只需要从对话框中接收fileName,然后打开文件并加载到表单中。

像这样:

private void button1_Click(object sender, EventArgs e)
{
    using (var dialog = new OpenFileDialog())
    {
        var result = dialog.ShowDialog();
        if (result != DialogResult.OK)
            return;
        pictureBox1.Image = Image.FromFile(dialog.FileName);
    }
}

这是Form1中的代码。

<强> [更新]

以下是如何从另一个表单访问一个表单的基本思路。

public class MyForm1 : Form
{
    public MyForm1()
    {
        InitializeComponent();
    }

    public void SetImage(Image image)
    {
        pictureBox1.Image = image;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        var form2 = new Form2(this);
        form2.Show();
    }
}

public class MyForm2 : Form
{
    private MyForm1 form1;

    public MyForm2()
    {
        InitializeComponent();
    }

    public MyForm2(MyForm1 form1)
    {
        this.form1 = form1;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        form1.SetImage(yourImage);
    }
}

答案 2 :(得分:2)

在Program.cs文件中,您可以设置任何值,FormOptions为表单的实例。

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        var frm = new Form1();
        // Add the code to set the picturebox image url
        Application.Run(frm);
    }

此外,您可以将构造函数添加到Form1并通过构造函数传递参数。

答案 3 :(得分:1)

理想情况下,您希望以ModelViewController模式构建代码。然后,您只需在模型中引用图片框中的图像。在与Form2中的OpenFileDialog交互时,您将调用连接到视图(Form1和Form2)的模型适配器接口来更改模型中保存的图像。简而言之,您需要从视图到模型的回调。如果您不想将您的代码重新设计为MVC,只需拥有一个共享对象,其中包含Form1和Form2在其构造函数中接收的图像引用,因此它们都可以修改它。

答案 4 :(得分:1)

你可以非常简单地做到这一点。 首先更改显示Form2的代码(在Form1中),如下所示:

<variable-of-type-Form2>.ShowDialog(this);

或者如果你不希望form2是模态的

<variable-of-type-Form2>.Show(this);

接下来,当您获得图像路径时,您可以像这样访问pictureBox

((PictureBox)this.Owner.Controls["pictureBox1"]).Image=Image.FromFile(<filename>);

假设您在Form1上有PictureBox,名称为“pictureBox1”