C# Windows Forms 中如何将UserControl1的图片传递至UserControl2
实现步骤
你只需要做3处简单修改即可完成需求:
1. 修复UserControl1的图片赋值逻辑
你当前在文件选择完成后直接给Panel背景赋值,没有同步到你提前定义的公开Icon属性,修改OpenToolStripMenuItem_Click中的赋值逻辑即可:
if (OFD.ShowDialog() == DialogResult.OK) { // 原来的代码:panel1.BackgroundImage = Image.FromFile(OFD.FileName); // 改为给Icon属性赋值,会自动同步Panel背景,同时外部可读取该属性拿到图片 Icon = Image.FromFile(OFD.FileName); }
2. 给UserControl2添加图片接收属性
给UserControl2新增一个公开属性,用于将传入的图片绑定到内部的PictureBox控件(请把代码中的pictureBox1替换为你UserControl2中实际的PictureBox控件名):
public partial class UserControl2 : UserControl { // 新增属性 开始 public Image DisplayImage { set { // 赋值给内部PictureBox pictureBox1.Image = value; } } // 新增属性 结束 public UserControl2() { InitializeComponent(); } // 原有其他代码不变 private static UserControl2 _instance; public static UserControl2 Instance { get { if (_instance == null) _instance = new UserControl2(); return _instance; } } }
3. 修改Form1的切换逻辑,切换时传递图片
在ToggleButton勾选、切换到UserControl2的逻辑中,新增一行图片赋值代码即可:
if (toggleButton1.Checked) { // 新增:将UserControl1的图片传递给UserControl2 UserControl2.Instance.DisplayImage = UserControl1.Instance.Icon; if (!panel1.Controls.Contains(UserControl2.Instance)) { panel1.Controls.Add(UserControl2.Instance); UserControl2.Instance.BringToFront(); } else { UserControl2.Instance.BringToFront(); } }
可选优化
如果需要避免用户未选择图片就切换的异常,可以在赋值前加非空判断:
if(UserControl1.Instance.Icon == null) { MessageBox.Show("请先在UserControl1中选择图片"); toggleButton1.Checked = false; return; }
内容的提问来源于stack exchange,提问作者Mike19
相关产品推荐
相关产品推荐

