如果我理解正确的话,你有一个表格form2
其中包含用于更改表单上的背景图像的按钮form1
.
我想知道你为什么使用this.BackgroundImage
in form2
改变背景图像?这会改变背景图像form2
, 不开form1
.
你实际上应该传递一个引用form1
to form2
然后使用form1.BackgroundImage = ...
.
这有点模糊 - 我建议你编辑你的问题以实际添加一些关于之间关系的信息form1
and form2
真的是。
首先,您需要传递一个实例form1
to form2
。这可以在构造函数中完成,例如,假设form2
打开于form1
。例如这样:
form2中的代码
// In form2, there's a member variable that holds the form1 reference
private form1 m_form1Instance;
// The constructor of form2 could look like this
public form2(form1 form1Instance)
{
...
// Remember the form1-instance
m_form1Instance = form1Instance;
}
// When a button is clicked in form2, the background image in form1 is changed
private void button1_Click(object sender, EventArgs e)
{
m_form1Instance.BackgroundImage = ...;
}
代码在form1中
// When form2 is opened, pass "this" to the constructor. The following
// sample opens form2 as a modal dialog
using (form2 f2 = new form2(this))
{
f2.ShowDialog(this);
}
这应该改变背景图像form1
,而不是在form2
.
如果您想保存跨会话显示的背景图像(即您希望在程序重新启动时显示相同的背景图像),请使用 Wink 的答案。这会将使用的背景图像保存到设置中。
好的,看来您想全局更改应用程序中所有表单上的背景图像。你必须采取除我上面描述的方法之外的另一种方法。
我要做的是创建一个单例类来描述当前的背景图像,并具有在图像更改时通知订阅者的事件。像这样,例如:
public class BackgroundImageHolder
{
private static BackgroundImageHolder m_instance;
private Bitmap m_backgroundImage;
public event EventHandler BackgroundImageChanged;
private BackgroundImageHolder() { }
public static BackgroundImageHolder Instance
{
get
{
if (m_instance == null) m_instance = new BackgroundImageHolder();
return m_instance;
}
}
public Bitmap BackgroundImage
{
get { return m_backgroundImage; }
set {
m_backgroundImage = value;
OnBackgroundImageChanged();
}
}
protected void OnBackgroundImageChanged()
{
if (BackgroundImageChanged != null)
BackgroundImageChanged(this, EventArgs.Empty);
}
}
每当您打开表单(即在构造函数中)时,您都会查询BackgroundImageHolder
为当前图像并将其设置为您的表单:
this.BackgroundImage = BackgroundImageHolder.Instance.BackgroundImage;
然后您订阅通知,以便表单可以在必要时更改背景图像:
BackgroundImageHolder.Instance.BackgroundImageChanged += BackgroundImageHolder_Changed;
您需要实现事件处理程序:
private void BackgroundImageHolder_Changed(object sender, EventArgs e)
{
this.BackgroundImage = BackgroundImageHolder.Instance.BackgroundImage;
}
然后,要全局改变图像,只需要告诉BackgroundImageHolder
关于新图像:
BackgroundImageHolder.Instance.BackgroundImage = ...;
Done.