Avatar billede zuran Nybegynder
10. februar 2009 - 19:15 Der er 9 kommentarer og
1 løsning

Foretage handlinger i Form1, fra Form2

Hej.

Jeg har 2 Windows Forms, hvor jeg gerne vil kunne foretage handlinger i den ene, fra den anden.

I Form1 har jeg pictureBox, og en knap der åbner Form2.

Jeg vil så gerne i Form2, kunne indtaste et tal i et tekstfelt, og herefter trykke på en knap, hvorved pictureBoxen i Form1, skal få sat sin bredde til det indtastede tal.

Jeg har kigget rundt omkring, men de fleste af tråde jeg har fundet, har ikke gjort specielt meget nytte.

Derfor håber jeg der er nogle der kan hjælpe. Tak på forhånd.
Avatar billede arne_v Ekspert
10. februar 2009 - 19:46 #1
Form2 skal have en ref til instansen af Form1, saa kan den kalde en metode der aendrer noget i Form1.
Avatar billede hmortensen Nybegynder
10. februar 2009 - 19:50 #2
I Form1 laver du en egenskab til picturebox.Width ala:
public int PicBoxBredde { set{ pictureBox.Width = value; } }

Der hvor du instansierer Form2, smider du en ref med til Form1:
Form2 f = new Form2(this);


I Form2 laver du konstruktøren om så den tager imod ref til Form1.

public class Form2 : Form
{
  Form1 frm1;

  public Form2(Form1 f)
  {
    frm1 = f;
  }
}

Så kan du kalde frm1.PicBoxBredde = X
Avatar billede arne_v Ekspert
10. februar 2009 - 19:54 #3
Et 4 aar gammelt eksempel:

using System;
using System.Drawing;
using System.Windows.Forms;

namespace E
{
    public class MainForm : Form
    {
        private Button button1;
        private TextBox textBox1;
        public MainForm()
        {
            InitializeComponent();
        }
        private void InitializeComponent()
        {
            textBox1 = new TextBox();
            button1 = new Button();
            SuspendLayout();
            textBox1.Multiline = true;
            textBox1.Location = new Point(50, 50);
            textBox1.Size = new Size(200, 50);
            button1.Location = new Point(50, 150);
            button1.Size = new Size(200, 50);
            button1.Text = "Åben sub form";
            button1.Click += new EventHandler(Button1Click);
            ClientSize = new Size(300, 250);
            Controls.Add(button1);
            Controls.Add(textBox1);
            Text = "Main Form";
            ResumeLayout(false);
        }
        public string TB
        {
            get
            {
                return textBox1.Text;
            }
        }
        void Button1Click(object sender, System.EventArgs e)
        {
            SubForm sf = new SubForm(this);
            sf.ShowDialog();
        }
    }
    public class SubForm : Form
    {
        private MainForm mf;
        private TextBox textBox1;
        public SubForm(MainForm mf)
        {
            this.mf = mf;
            InitializeComponent();
        }
        private void InitializeComponent()
        {
            textBox1 = new TextBox();
            SuspendLayout();
            textBox1.Multiline = true;
            textBox1.Location = new Point(50, 50);
            textBox1.Size = new Size(200, 50);
            textBox1.Text = mf.TB;
            ClientSize = new Size(300, 150);
            Controls.Add(textBox1);
            Text = "Sub Form";
            ResumeLayout(false);
        }
    }
    public class TestClass
    {
        [STAThread]
        public static void Main(string[] args)
        {
            Application.Run(new MainForm());
        }
    }
}
Avatar billede zuran Nybegynder
10. februar 2009 - 20:00 #4
Hej.

Ved dit eksempel hmortensen, får jeg fejl:

Form2 f = new Form2(this);

Fejlen jeg får givet er, at denne new Form2() ikke er sat op til, at kunne have argumenter indenfor ( og ). Kunne jeg mangle en using System... øverst oppe?
Avatar billede hmortensen Nybegynder
10. februar 2009 - 20:03 #5
Hvis du læser videre, står der at du skal rette konstruktør for Form2, for at kunne kalde den med ref'en.
Avatar billede zuran Nybegynder
10. februar 2009 - 20:10 #6
Ja, det har du ret i.

Koden ser ud til at skulle virke fint, ingen fejl, men af en eller anden grund, bliver Form2 helt tomt indholdsmæssigt. Kan du hjælpe med det?
Avatar billede hmortensen Nybegynder
10. februar 2009 - 20:17 #7
Gætter på at du har lavet en ny konstruktør, i stedet for at ændre den der var, som kalder InitializeComponent()
Avatar billede zuran Nybegynder
10. februar 2009 - 20:20 #8
Min fejl!

Det virker som det skal. Jeg takker for hjælpen.

Eftersom jeg ikke er så meget inde i, har jeg ikke forstået hvad du, arne_v mente, før nu, men jeg synes i skal delene pointene, hvis i er med på det.
Avatar billede hmortensen Nybegynder
10. februar 2009 - 20:40 #9
Det var så lidt.
Avatar billede zuran Nybegynder
13. februar 2009 - 18:13 #10
Tja, så vil jeg lade dig få point, hmortensen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester