Avatar billede arcanex Nybegynder
22. august 2004 - 17:02 Der er 16 kommentarer og
1 løsning

Ændre label.Text fra en anden klasse ?

Heysa. Jeg er stødt på et problem som jeg håber i kan hjælpe mig med.

Jeg har en Class1, hvori der er en Form med en Label på. Jeg ønsker så at ændre F.eks. Label.Text fra Class2. Men hvordan gør jeg det ?
Har prøvet med properties, men uden held.
Avatar billede snepnet Nybegynder
22. august 2004 - 17:21 #1
Du bliver nok nødt til at forklare hvad det er for problemer du har med properties.... Det er en helt normal måde at gøre det på.
Avatar billede snepnet Nybegynder
22. august 2004 - 17:23 #2
Det her er f.eks. en helt gangbar løsning :
(ikke at det kan bruges til noget, men det er jo også bare princippet i det :o)

public class Class1
{
    public Class1()
    {
        Class2 obj = new Class2();
        obj.LabelText = "hej";
    }
}

public class Class2
{
    protected label l;

    public string LabelText
    {
        get{return l.Text;}
        set{l.Text = value;}
    }
   
    public Class2()
    {
        l = new Label();
    }
}

mvh
Avatar billede arne_v Ekspert
22. august 2004 - 17:27 #3
Du sende en reference til din Class1 instans med over i constructor af Class2 og
lade den gemme i et private field.

Så kan enhver metode i Class2 tilgå public metoder og properties i instansen af Class1.
Avatar billede arcanex Nybegynder
22. august 2004 - 17:30 #4
Ja, Jeg har som sagt Class1 med en Mainform med en Label1.
Så har jeg Class2, men jeg er jo nødt til at lave en ny instans af Mainform for at kunne bruge metoden til at ændre Label1.Text, men der må jo være en anden vej ?
Avatar billede arcanex Nybegynder
22. august 2004 - 17:30 #5
Der var nok noget arne :)
Avatar billede arcanex Nybegynder
22. august 2004 - 17:31 #6
prøver lige og se....
Avatar billede arcanex Nybegynder
22. august 2004 - 17:32 #7
Kan jeg få dig til at give et lille eksempel på hvordan man gør det ?
Avatar billede arne_v Ekspert
22. august 2004 - 17:34 #8
Giv mig 5 minutter
Avatar billede arcanex Nybegynder
22. august 2004 - 17:35 #9
Det lyder fint..
Avatar billede arne_v Ekspert
22. august 2004 - 17:43 #10
using System;
using System.Windows.Forms;

namespace DefaultNamespace
{
    public class MainForm : System.Windows.Forms.Form
    {
        private System.Windows.Forms.Label label1;
        public MainForm()
        {
            InitializeComponent();
        }
       
        [STAThread]
        public static void Main(string[] args)
        {
            Application.Run(new MainForm());
        }
       
        private void InitializeComponent()
        {
            this.label1 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            this.label1.Location = new System.Drawing.Point(64, 96);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(168, 48);
            this.label1.TabIndex = 0;
            this.label1.Text = "";
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 266);
            this.Controls.Add(this.label1);
            this.Name = "MainForm";
            this.Text = "MainForm";
            this.ResumeLayout(false);
            HelperClass hc = new HelperClass(this);
            hc.doit();
        }
        public void setLabel1(string lbl)
        {
            label1.Text = lbl;
        }
    }
    public class HelperClass
    {
        private MainForm mf;
        public HelperClass(MainForm mf)
        {
            this.mf = mf;
        }
        public void doit()
        {
            mf.setLabel1(DateTime.Now.ToString());
        }
    }
}
Avatar billede arne_v Ekspert
22. august 2004 - 17:46 #11
Ikke jordens mest avancerede eksempel.

            HelperClass hc = new HelperClass(this);
            hc.doit();

fra main form laves der en helper klasse med en reference til main formen.

    public class HelperClass
    {
        private MainForm mf;
        public HelperClass(MainForm mf)
        {
            this.mf = mf;
        }
        public void doit()
        {
            mf.setLabel1(DateTime.Now.ToString());
        }
    }

construktor gemme referencen til main formenen.

Og metoden i helper klassen kan bruge den til at sætte labelen.

I dete her eksempel er der ikke nogen grund til at gøre det påd en måde, men det
illusterer teknikken.
Avatar billede arcanex Nybegynder
22. august 2004 - 17:48 #12
Det var lige det jeg skulle bruge, mange tak.

Du får 100 point, hvis du gider smide et svar.
Avatar billede arne_v Ekspert
22. august 2004 - 17:50 #13
svar
Avatar billede arcanex Nybegynder
22. august 2004 - 17:51 #14
hmm, kunne ikke lige finde ud af at give mere end det den originalt gav :(
Avatar billede arne_v Ekspert
22. august 2004 - 17:52 #15
Avatar billede arne_v Ekspert
22. august 2004 - 17:55 #16
Hvis det endelig skulle være er der altid nød løsningen

http://expfaq.1go.dk/?id=30#giv_flere_point
Avatar billede arcanex Nybegynder
22. august 2004 - 17:59 #17
Ja okay, jeg må være blind :)
Men håber det går, tak for hjælpen.
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