【问题标题】:How to change backGround Image from another form?如何从另一种形式更改背景图像?
【发布时间】:2014-05-28 11:07:15
【问题描述】:

我有两种形式,我想从第二种形式更改第一种形式的背景。我已经为form2中的form1和button1选择了背景图像,但没有任何反应。提前感谢(Windows 窗体) 第一种形式:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form2 frm2 = new Form2();
            frm2.ShowDialog();
        }
    }
}

第二种形式:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form2 : Form
    {
        public Form2()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form1 frm1 = new Form1();
            frm1.BackgroundImage = button1.BackgroundImage;
        }
    }
}

【问题讨论】:

    标签: c# winforms forms


    【解决方案1】:

    在您的第二个表单中,添加一个私有成员,该成员将保存对第一个表单的引用:

    private Form _form1 = null;
    

    然后在 Form2 的构造函数中,允许传入该引用:

    public Form2(Form form1)
    {
        InitializeComponent();
        _form1 = form1;
    }
    

    现在,在该按钮单击处理程序中,您可以:

    private void button1_Click(Object sender, EventArgs e)
    {
        _form1.BackgroundImage = button1.BackgroundImage;
    }
    

    另一种方法是向 Form1 添加一个方法,该方法接收要设置为背景的图像。假设 Form2 中存在相同的 _form1 引用,则将其添加到 Form1:

    public void ChangeBGImage(Image bgImage)
    {
        this.BackgroundImage = bgImage;
    }
    

    而从Form2,你称它为:

    private void button1_Click(Object sender, EventArgs e)
    {
        _form1.ChangeBGImage(button1.BackgroundImage);
    }
    

    【讨论】:

    • 我应该将什么作为我的论据发送给 Form2 frm2 = new Form2();?
    • 我假设您创建 Form2 in Form1,对吗?如果是这样:Form 2 frm2 = new Form2(this);
    【解决方案2】:

    试试这个,

    FOrm1

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                Form2 frm2 = new Form2();
    
                //check if button1 clicked and then change the background
                if(frm2.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                      this.BackgroundImage = frm2.GetBackImage();
                }
            }
        }
    }
    

    Form2

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;
    
    namespace WindowsFormsApplication1
    {
        public partial class Form2 : Form
        {
            public Form2()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
                //Form1 frm1 = new Form1();
                //frm1.BackgroundImage = button1.BackgroundImage;
                this.DialogResult = System.Windows.Forms.DialogResult.OK;
            }
    
           public Image GetBackImage()
           {
               return this.button1.BackgroundImage;
           }
        }
    }
    

    【讨论】:

      【解决方案3】:

      问题是您无法从form2 访问form1 来更改它。如果您想更改form1 中的某些内容,则不应创建Form1 的新实例。您应该在构造函数中获取实例。

      public partial class Form1 : Form
      {
          public Form1()
          {
              InitializeComponent();
          }
      
          private void button1_Click(object sender, EventArgs e)
          {
              Form2 frm2 = new Form2(this);
              frm2.ShowDialog();
          }
      }
      public partial class Form2 : Form
      {
          Form1 frm1; 
          public Form2(Form1 frm1)
          {
              InitializeComponent();
              this.frm1 = frm1; 
          }
      
          private void button1_Click(object sender, EventArgs e)
          {
              frm1.BackgroundImage = button1.BackgroundImage;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2022-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-07
        • 2014-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多