Delegaty w oknach – transfer PNG pomiędzy oknami

0

Witajcie.

Postanowiłem przerobić świetny program www.codeproject.com/Using-a-delegate dodając swoją funkcjonalność jednocześnie ucząc się delegatów w C#. tak kombinowałem ale bez skutku. chciałem w trywialny sposób przesłać obrazek z okna 1 do 2. i ponownie z 2 do 1. Jednak nie chciałem go wczytywać do okna 2 z pliku.

Wklejam wypociny:

Form1:

namespace Delegates
{
	public class Form1 : System.Windows.Forms.Form
	{
        private System.Windows.Forms.TextBox txtForm1;
        private System.Windows.Forms.Button btnForm1;
        private System.Windows.Forms.Label label1;
        private PictureBox pictureBox1;
		
		private System.ComponentModel.Container components = null;

		public Form1()
		{
			InitializeComponent();
		}

		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if (components != null) 
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}

		#region Windows Form Designer generated code
		
		private void InitializeComponent()
		{   } 

		static void Main() 
		{
			Application.Run(new Form1());
		}

        private void btnForm1_Click(object sender, System.EventArgs e)
        {
            Image image = Image.FromFile(@"C:\Users\***\Pictures\01.jpg");
            this.pictureBox1.Image = image;
            Form2 form2 = new Form2();

            form2.passControl = new Form2.PassControl(PassData);
            form2.pass2Cotrol = new Form2.Pass2Control(Pass2Data);
            form2.Show();        
        }

        private void PassData(object sender)
        {
            txtForm1.Text = ((TextBox)sender).Text;

        }
        private void Pass2Data(object sender)
        {
            pictureBox1.Image = ((PictureBox)sender).Image;//tu bład //Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu.
        }
	}

Cudowałem z tym dałem System.EventArgs e np. i nic i druga foremka:

Form2:

namespace Delegates
{
	public class Form2 : System.Windows.Forms.Form
	{
        private System.Windows.Forms.Button btnForm2;
        private System.Windows.Forms.TextBox txtForm2;
        private System.Windows.Forms.PictureBox picture;
	 private System.ComponentModel.Container components = null;
        private PictureBox pictureBox1;

        public delegate void PassControl(object sender);
        public delegate void Pass2Control(object sender);

       
        public PassControl passControl;
        public Pass2Control pass2Cotrol;

		public Form2()
		{
			
			InitializeComponent();

			
		}

        public TextBox getText() 
        {
            return txtForm2;
        }
        public PictureBox Picture2Box()
        {
            return picture;
        }
		
		protected override void Dispose( bool disposing )
		{
			if( disposing )
			{
				if(components != null)
				{
					components.Dispose();
				}
			}
			base.Dispose( disposing );
		}
		private void InitializeComponent()
		{
//…
//Wyciety blok kodu opisujący kontrolki 
//…
}
        private void btnForm2_Click(object sender, System.EventArgs e)
        { 
            if (passControl != null)
            {
                passControl(txtForm2);
                pass2Cotrol(picture);
            }
            this.Hide();        
        }
}
0

Wydaje mi się, że powinieneś zamiast:

            form2.passControl = new Form2.PassControl(PassData);
            form2.pass2Cotrol = new Form2.Pass2Control(Pass2Data);

Po prostu napisać:

            form2.passControl = PassData;
            form2.pass2Cotrol = Pass2Control;
0

Będzie prościej. Poproszę o kod, upchanie bitmapy do delegata i wyświetlenie je na innym oknie. No + 2 buttony coś robiące. Dzięki za bardzo szybką odpowiedz ale nie działa. Dalej był błąd ze nie znalazło obiektu (obrazka) z sender’a.

0

W Form 2 masz picturebox ale nigdzie nie ma konstruktora tworzącego go.
A jest pewnie w tym wyciętym kodzie. No ale jak uruchamia się form2 to tam nie ma nigdzie przypisania obrazka do picture. I potem jak wywołuje się delegat to jest null bo picture przekazany nie ma image. Tak mi się wydaje

1 użytkowników online, w tym zalogowanych: 0, gości: 1