C# 如何从另一种形式更改picturebox的图像?

C# 如何从另一种形式更改picturebox的图像?,c#,visual-studio,C#,Visual Studio,如何从另一个窗体更改窗体PictureBox的图像? 实例Form2映像需要更改Form1映像 我试过这个 exmp.Code 1 //This is for Form1 private void pictureBox1_MouseEnter(object sender, EventArgs e) { Form2 Fr2 = new Form2(); Fr2.Owner = this; }

如何从另一个窗体更改窗体PictureBox的图像? 实例Form2映像需要更改Form1映像

我试过这个

    exmp.Code 1        

    //This is for Form1
    private void pictureBox1_MouseEnter(object sender, EventArgs e)
    {
        Form2 Fr2 = new Form2();
        Fr2.Owner = this;
    }

        private void pictureBox2_Click(object sender, EventArgs e)
    {
        Fr2.Show();
    }

    //This is for Form2
        private void pictureBox2_Click(object sender, EventArgs e)
    {
        try
        {
            (this.Owner as Form1).pictureBox1.Image = pictureBox2.Image;
        }
        catch
        {

        }
    }
这个代码不起作用! 但如果我试试这个,它会起作用的

    exmp.Code 1        

    //Form1
        private void pictureBox1_Click(object sender, EventArgs e)
    {
        Form2 Fr2 = new Form2();
        Fr2.Show();
        Fr2.Owner = this;
    }
    
    //Form2 
    private void pictureBox2_Click(object sender, EventArgs e)
    {
        try
        {
            (this.Owner as Form1).pictureBox1.Image = pictureBox2.Image;
        }
        catch
        {

        }
    }
但是我不能使用第二个代码,因为我需要单击ContextMenuStrip来打开Form2

任何问题请写在评论中

在表单1中,“Fr2”需要在表单级别声明,这样您就可以从“pictureBox1\u MouseEnter”和“pictureBox2\u Click”访问它。通过将“this”传递到
Show()
来设置
所有者

这是表格1:

private Form2 Fr2;

private void pictureBox1_MouseEnter(object sender, EventArgs e)
{
    Fr2 = new Form2();
}

private void pictureBox2_Click(object sender, EventArgs e)
{
    if (Fr2!=null && !Fr2.IsDisposed)
    {
        Fr2.Show(this); // <-- pass Form1 as the Owner
    }
}

要访问Form1中的“pictureBox1”,您必须将其
修饰符
属性更改为public。

这是否回答了您的问题?还有这个重复:它与PictureBox和图像非常不同,我知道如何使用值,但我不确定我是否知道如何使用图像。如果你能用一个解决方案来回答这个问题,那将是很有帮助的!图片框是一个专用控件。从窗体访问另一窗体控件的所有模式都有效,具体取决于场景和行为。“野生”解决方案是将窗体设置为单例。就我个人而言,我将所有的单实例表单创建为单实例表单,这样我就可以做任何我想做的事情,特别是表单有一个类型化的DataSet实例(没有像Delphi中那样的数据模块)。只有临时形式是传统的。谢谢,伙计!它起作用了。
private void pictureBox2_Click(object sender, EventArgs e)
{
    Form1 Fr1 = this.Owner as Form1;
    if (Fr1!=null)
    {
        Fr1.pictureBox1.Image = pictureBox2.Image;
    }
}