2011-05-24 73 views
3

可以说我有两种形式(Form1和Form2)。如何从对话框中更改Form1中的某些内容?

  • Form1上有一个PictureBox
  • 窗体2我有一个OpenFileDialog

Form1中是主要形式,所以,当我运行该项目,我看到Form1上。

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

回答

1

你可以很简单地做到这一点。 首先改变你的代码(在Form1中),显示窗体2到看起来像这样:

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

,或者如果你不想窗口2是模态

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

下一页时,你有路径的图像,你可以访问的PictureBox这样

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

假设您有图片框在Form1上的名称为 “pictureBox1”

2

将一个窗体作为参数传递给第二个窗体的构造函数,或添加一个传递该引用的方法。在你参考了你的表单之后,你可以用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); 
    } 
} 
+0

你能更具体吗? – Pedrum 2011-05-24 04:11:28

+0

这是重新解决问题的好办法......除非您有要求以不同形式设置图片。 – 2011-05-24 04:30:47

+0

我知道这个... 如何改变form1中picbox的图片从form2 ...? – Pedrum 2011-05-24 04:53:45

1

理想情况下,您想要在ModelViewController模式中构造代码。然后,只需在模型中为图片框中的图片添加参考。当与Form2中的OpenFileDialog进行交互时,您可以调用模型适配器接口挂钩到视图(Form1和Form2)中以更改模型中的图像。总之,您需要从视图到模型的回调。如果您不想将代码重新设计为MVC,只需拥有一个共享对象来保存Form1和Form2在构造函数中接收的图像引用,以便它们都可以对其进行修改。

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

相关问题