C# 如何从另一个UserControl更改UserControl上的picturebox

C# 如何从另一个UserControl更改UserControl上的picturebox,c#,winforms,user-controls,C#,Winforms,User Controls,在UserControl1上,我想使pictureBox1(在UC1上)与UserControl2上的pictureBox1相同 关于UC1 UserControl5 obj = new UserControl5(); pictureBox1.Image = obj.picturebox; public UserControl5 UserControl5Instance { get; set; } public UserControl1() { InitializeComponent

在UserControl1上,我想使pictureBox1(在UC1上)与UserControl2上的pictureBox1相同

关于UC1

UserControl5 obj = new UserControl5();
pictureBox1.Image = obj.picturebox;
public UserControl5 UserControl5Instance { get; set; }
public UserControl1()
{

    InitializeComponent();
    if (UserControl5Instance != null)
    {
        UserControl5Instance.picturebox = (Image)this.pictureBox1.Image.Clone();
    }
}
关于UC5

public Image picturebox
{
    get { return pictureBox1.Image; }
}
public UserControl1 UserControl1Instance { get; set; }
public UserControl5()
{
    InitializeComponent();
}
public Image picturebox
{
    get { return this.pictureBox1.Image; }
    set { this.pictureBox1.Image = value; }
}
这似乎不起作用

编辑
关于UC1

UserControl5 obj = new UserControl5();
pictureBox1.Image = obj.picturebox;
public UserControl5 UserControl5Instance { get; set; }
public UserControl1()
{

    InitializeComponent();
    if (UserControl5Instance != null)
    {
        UserControl5Instance.picturebox = (Image)this.pictureBox1.Image.Clone();
    }
}
关于UC5

public Image picturebox
{
    get { return pictureBox1.Image; }
}
public UserControl1 UserControl1Instance { get; set; }
public UserControl5()
{
    InitializeComponent();
}
public Image picturebox
{
    get { return this.pictureBox1.Image; }
    set { this.pictureBox1.Image = value; }
}

在UC5上添加一个事件,该事件在映像更改时触发,并让UC1订阅它

public class UC1 : UserControl
{
    UC5 UserControl5 = new UC5();
    PictureBox picturebox;

    public UC1()
    {
        picturebox = new PictureBox();
        UserControl5.ImageChanged += UserControl5_ImageChanged;
    }

    private void UserControl5_ImageChanged(Image newImage)
    {
        if (this.picturebox.Image != null)
            this.picturebox.Image.Dispose();
        this.picturebox.Image = (Image)newImage.Clone();
    }
}

public class UC5 : UserControl
{
    public delegate void ImageChangedHandler(Image newImage);

    public Image image {
        get { return _image; }
        set {
            if (_image != value) {
                _image = value;
                ImageChanged?.Invoke(_image);
            } } }
    public Image _image = null;
    public event ImageChangedHandler ImageChanged;
}

每当更新UC5.Image时,这应该会更新UC1上的picturebox映像。

-“如果要在多个picturebox控件中使用同一映像,请为每个picturebox创建映像的克隆。从多个控件访问同一映像会导致出现异常。”。但是你能告诉我一种从UC5将克隆放入UC1的方法吗?
usercontrol5obj=newusercontrol5()似乎是个错误。您可能在某个地方有一个现有的
UserControl5
,例如在父窗体上或当前的
UserControl1
中。当前您创建了一个
UserControl5
的实例,该实例明显不同于窗体上的实例。遵循指示。