如何从对话框更改Form1中的某些内容?

| 可以说我有两种形式(Form1和Form2)。 Form1有一个PictureBox Form2我有一个OpenFileDialog Form1是主要窗体,因此在运行项目时会看到Form1。 如何从Form2更改Form1中PictureBox中的图像?     
已邀请:
您可以非常简单地执行此操作。 首先,将显示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 \”     
如何将值从子级传递回父级表单? 基本上,使用一些属性公开在打开的文件对话框中返回的值,并让父窗体抓住它。     
在Program.cs文件中,您可以设置任何值,将FormOptions设置为表单的instance。
    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并通过构造函数传递参数。     
将一种形式作为参数传递给第二种形式的构造函数,或添加传递引用的方法。引用表单后,您可以对from进行任何操作。 是否以公共成员身份共享图片框取决于您。但是,我建议使用第一种形式的公共方法
SetImage()
。第二种形式称为“ 5”。 [更新] 等待,为什么需要从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);
    }
}
    
理想情况下,您希望以ModelViewController模式构造代码。然后,您只需在模型中引用图片框中的图像即可。与Form2中的OpenFileDialog进行交互时,您将调用钩在视图(Form1和Form2)中的模型适配器接口,以更改模型中保留的图像。简而言之,您需要从视图到模型的回调。如果您不想将代码重新设计为MVC,只需拥有一个共享对象,其中包含Form1和Form2都在其构造函数中接收的图像引用,因此它们都可以对其进行修改。     

要回复问题请先登录注册