Avatar billede Droa Seniormester
25. oktober 2009 - 18:00 Der er 5 kommentarer og
1 løsning

Tilgå Parent objekt fra Child form

Jeg har et objekt der hedder "log" i min Main form, den er public, men stadig ved jeg ikke helt hvordan jeg tilgår den fra min Child form, kan man det?
Avatar billede arne_v Ekspert
25. oktober 2009 - 18:09 #1
Send en ref til main form med over i chold form, så kan child form tilgå members af main form.
Avatar billede arne_v Ekspert
25. oktober 2009 - 18:20 #2
Old 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 Droa Seniormester
25. oktober 2009 - 18:29 #3
Jeg har altid tænkt, vis du gør det på den måde, difinere man så nyt hukommelses punkt når man er i den nye classe?


        public SubForm(MainForm mf)
        {
            this.mf = mf;
            InitializeComponent();
        }


eller vis man skriver til this.mf. vil den så stadig ligge det i Mainforms mf?
Avatar billede Syska Mester
25. oktober 2009 - 20:40 #4
Den nye klasse vil jo blive allokeret, men når du tilgår MF er det samme hukommelses område ... om du tilgår det fra selve MF eller fra din child form.

// ouT
Avatar billede Droa Seniormester
25. oktober 2009 - 20:52 #5
mange tak, det var lige det jeg skulle høre :)

ville arne_v være så venlig og ligge et svar?
Avatar billede arne_v Ekspert
25. oktober 2009 - 21:10 #6
generelt vil:

private X o;
public M(X o)
{
    this.o = o;
}

kun kopiere en reference (pointer) hvis X er en class.

Det er kun hvis X er en struct at der vil blive kopieret data.

Og Form er en class ikke en struct.

Og et svar.
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