Avatar billede webcreator Nybegynder
11. februar 2005 - 20:06 Der er 7 kommentarer og
1 løsning

Metode på MainForm skal være tilgængelig på UnderForm

Hej Eksperter.

Jeg har en MainForm og en UnderForm. Min UnderForm åbnes fra min MainForm. På UnderFormen ønsker jeg at kunne udføre en metode, som ligger på min MainForm. Hvordan gøres dette? Jeg går ud fra, at jeg skal have en reference tilbage til min MainForm. Men er det en pæn måde at gøre det på?
Avatar billede arne_v Ekspert
11. februar 2005 - 20:17 #1
Jeg lavede det her eksempel til et andet spm. i januar:

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 arne_v Ekspert
11. februar 2005 - 20:17 #2
Der ryger en reference til MainForm over i SubForm og SubForm bruger så
den (i dette tilfælde til at kalde en property, men det kunne lige så godt
have været en metode).
Avatar billede webcreator Nybegynder
11. februar 2005 - 20:22 #3
Ah, det var dét du mente tidligere :)
Men hele indkapslingen ryger jo, når man gør den slags. Så er det særligt smart? Måske en bedre løsning var, at lave en helt ny klasse, som man lavede en instans af på MainForm og UnderForm, og så lavede serialiseringen dén vej igennem.
Men jeg må indrømme, at jeg ikke ved hvilken løsning der er bedst.
Avatar billede arne_v Ekspert
11. februar 2005 - 20:24 #4
Der ryger ikke nogen indkapsling.

Instans variablene i MainForm er stadig private og tilgangen sker gennem
public methods og properties.
Avatar billede arne_v Ekspert
11. februar 2005 - 20:24 #5
Nu har jeg jo set nogle af dine andre serialize/deserialize spørgsmål, men
jeg fangede ikke lige at dette havde noget med dem at gøre.
Avatar billede webcreator Nybegynder
11. februar 2005 - 20:27 #6
Oh, ok. Well, in that case, tør jeg godt bruge din løsning. Jeg forsøger mig lige med den :)
Avatar billede webcreator Nybegynder
11. februar 2005 - 20:30 #7
Det virkede jo fuldstændig efter hensigten. Tusind tak, Arne. Du er dagens man igen :)
Hit med et svar
Avatar billede arne_v Ekspert
11. februar 2005 - 21:04 #8
kommer her
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