Проблема в том, что у вас есть несколько экземпляров из Form1
. Представьте, что Form1
было яблоком, а Form2
апельсином. У вас есть ваше яблоко на экране, которое в picBtn_Click
говорит компьютеру теперь также отображать оранжевый.
Этот оранжевый в imageUploadBtn_Click
указывает компьютеру создать new Apple
, содержащую выбранное вами изображение. Однако вы не говорите существующему яблоку о его отображении и не просите, чтобы ваше второе яблоко также отображалось на экране.
Извините за странную аналогию, но я надеюсь, что это поможет. Вам нужно, чтобы Form2
осознал существующий Form1
. Вы могли бы сделать это, если бы конструктор Form2
взял Form1
при его создании:
В Form2
:
private readonly Form1 _apple;
//Initializing second form:
public Form2(Form1 apple)
{
InitializeComponent();
_apple = apple;
}
//This function is activated if the image upload button was clicked:
private void imageUploadBtn_Click(object sender, EventArgs e)
{
//New file dialog object:
OpenFileDialog dialog = new OpenFileDialog();
//Accept images for files only:
dialog.Filter= "Image files (*.jpg, *.jpeg, *.jpe, *.jfif, *.png) | *.jpg; *.jpeg; *.jpe; *.jfif; *.png";
dialog.ShowDialog();
Image newImage = Image.FromFile(dialog.FileName);
// now, instead of creating a second instance of Form1,
// pass the image to the existing instance.
_apple.UpdatePicture(newImage);
}
Вам нужно будет создать public
метод для Form1
с именем UpdatePicture
, но я оставлю это вам. Вам также нужно будет Form1
передать себя Form2
, когда он создаст Form2
, что можно сделать так:
Form2 form2 = new Form2(this);
Обратите внимание, что пока это будет работать, мы стараемся избегать связывания элементов пользовательского интерфейса вместе, как это. Это будет работать, но есть некоторые более сложные механизмы, такие как MVVM , на которые стоит обратить внимание.