繁体   English   中英

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

[英]How can I Change something in a Form1 from a DialogBox?

假设我有两个 forms ( Form1 和 Form2 )。

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

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

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

如何将孩子的值传递回父表单?

基本上,使用某些属性公开在打开文件对话框中返回的值,然后让父窗体抓取它。

将一种形式作为参数传递给第二种形式的构造函数,或者添加一个传递引用的方法。 获得对表单的引用后,您可以使用 from 做任何您想做的事情。

是否以公共会员的身份分享图片框由您决定。 但是,我建议在第一种形式中创建一个公共方法SetImage() 第二种形式将调用form1.SetImage()

[更新]

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

像这样:

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);
    }
}

在 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 并通过构造函数传递参数。

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

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

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

或者如果您不希望 form2 成为模态

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM