Если вы меня поняли правильно, у вас есть форму form2
, которая содержит кнопки для изменения фонового изображения на форме form1
.
Интересно, почему вы используете this.BackgroundImage
в form2
, чтобы изменить фоновое изображение? Это изменит фоновое изображение на form2
, а не на form1
.
Вы должны фактически передать ссылку на form1
на номер form2
, а затем использовать form1.BackgroundImage = ...
.
Это все немного расплывчато - я предлагаю вам отредактировать свой вопрос, чтобы фактически добавить некоторую информацию о том, как действительно существует связь между form1
и form2
.
Прежде всего, вам нужно передать экземпляр form1
в 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 = ...;
Выполнено.
Да, это было правильно. Form2 имеет кнопки, и проблема в том, что когда я изменяю backgroud в From2, он не изменяется в Form1. Как достичь этого, когда я нажимаю кнопку, у которой есть изображение, которое будет оставаться до тех пор, пока оно не будет изменено другим? – user2535448
Nice, но есть способ сохранить изображение.Как и в form2, фоновое изображение изменяется и сохраняет один и тот же фон в других формах, потому что, когда я меняю фоновое изображение в form2, когда я возвращаюсь к form1, фоновое изображение является нулевым, и я хочу сохранить тот, который я использовал в form2. – user2535448
Я отредактирую свой ответ. –