如何从对话框中更改 Form1 中的某些内容
本文关键字:Form1 对话框 | 更新日期: 2023-09-27 17:57:23
假设我有两种形式(Form1和Form2)。
- Form1 有一个图片框
- Form2 我有一个 OpenFileDialog
是主窗体,因此当我运行项目时,我看到 Form1。
如何从 Form2 更改窗体 1 中图片框中的图像?
如何将值从子窗体传递回父窗体?
基本上,使用某些属性公开在打开文件对话框中返回的值,并让父窗体获取它。
在程序.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 并通过构造函数传递参数。
将一个窗体作为参数传递给第二个窗体的构造函数,或添加传递引用的方法。在你有了对表单的引用后,你可以用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);
}
}
你可以非常简单地做到这一点。首先,将显示 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"的图片框
理想情况下,您希望在模型视图控制器模式中构建代码。然后,您只需在模型中引用图片框中的图像即可。在 Form2 中与 OpenFileDialog 交互时,您将调用挂钩到视图(Form1 和 Form2)中的模型适配器接口,以更改模型中保存的图像。简而言之,您需要从视图到模型的回调。如果不想将代码重新设计为 MVC,只需使用一个共享对象来保存 Form1 和 Form2 在其构造函数中接收的图像引用,以便它们都可以对其进行修改。