AZHAR SAYYAD Ответов: 3

Как передать изображение из одной формы в другую в C#


Здравствуйте, у меня есть две формы в моем приложении, и я хочу передать изображение из одной формы в другую. предположим, моя первая форма-это регистрация, в которой есть графическое поле. и я захватываю изображение в другой форме (captureform). теперь я хочу отправить захваченное изображение из captureform в регистрационную форму. без перезагрузки регистрационной формы.

Что я уже пробовал:

вот я пробовал первые две вещи на присвоить фото с другого элемента управления PictureBox, как
Регистрация frmreg = новая регистрация();
frmreg.imgUpload.Image = imgPreview.Изображение;

но это не работает для меня после этого я попробовал с методом с параметром изображения здесь данные приходят но не могут отображаться в поле изображения как
в плену форма
Регистрация frmreg = новая регистрация();
frmreg.DisplayImage(imgPreview.Изображение);

и в образной форме я создал для этого метод.
public void DisplayImage(Image upload)
     {
         imgUpload.Image = upload;
     }

здесь данные поступают в загрузку, но не отображаются в моем picturebox

3 Ответов

Рейтинг:
2

Midi_Mick

Кое - что я обнаружил об изображениях, когда писал свою статью SafeImage-если вы загружаете изображение в форму или элемент управления на форме, когда форма закрывается, это изображение удаляется. Если вы пытаетесь передать этот образ куда-то еще, вы попадете в беду. Вы делать нужно сделать его копию, прежде чем передавать.

Bitmap copy = Bitmap.FromImage(imgPreview.Image);
frmReg.UploadImage.Image = copy;

Если вы этого не сделаете, то, когда captureForm будет закрыт, изображение будет удалено, и, скорее всего, начнут происходить всевозможные странные вещи.


Рейтинг:
1

OriginalGriff

Не создавайте каждый раз новый экземпляр: повторно используйте текущий.
Это должно помочь: Передача информации между двумя формами, Часть 1: Родитель-Ребенок[^]
Но...
Добавьте переменную регистрации уровня класса:

private Registration frmReg = null;
Затем, когда вам нужно будет открыть форму, сделайте это:
if (frmReg == null)
    {
    frmReg = new Registration();
    frmReg.FormClosing += frmReg_FormClosing;
    }

И добавьте простой обработчик:
void frmReg_FormClosing(object sender, FormClosingEventArgs e)
    {
    frmReg = null;
    }

Таким образом, у вас есть запись текущего экземпляра, и если он закрыт, вы выбрасываете его на следующий раз.
Затем вы можете добавить свойство в регистрационную форму, которая принимает изображение и прикрепляет его к нему:
if (frmReg != null)
   {
   frmReg.UserPicture = myImage;
   }


Рейтинг:
0

Perić Željko

Почему бы вам не использовать Класс OpenFileDialog[^] для импорта изображений из файлов в регистрационную форму picture box control ?

В любом случае, этот пример отлично работает :

using System;
using System.Windows.Forms;

namespace Pass_image_from_Capture_to_Registration_form
{
	/// <summary>
	/// Description of Registration Form.
	/// 
	/// Registration Form is main ( parrent ) form of application
	/// that contains it's own Registration_Form_Image picture box control
	/// </summary>
	public partial class Registration_Form : Form
	{
		
		// Create new Capture form that contains Image_Preview picture box
		// with initial image as child form of application
		//
		private Capture_Form Capture = new Capture_Form();
		
		public Registration_Form()
		{
			//
			// The InitializeComponent() call is required for Windows Forms designer support.
			//
			InitializeComponent();
			
			//
			// Set image to Registration Form from Capture form
			//
			Registration_Form_Image.Image = Capture.Image_Preview.Image;
		}
	}
}


Не забудьте установить свойство modifiers элемента управления Capture Form picture box в public, чтобы его можно было изменить или получить доступ из регистрационной формы.

Всего наилучшего,
Желько Перич