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.
Annonceindlæg tema
Offentlig digitalisering
Fra effektivisering til digital suverænitet. Hvordan skaber det offentlige en digital fremtid med AI, sikkerhed og kontrol i centrum?
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å.
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
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.
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 ?
22. august 2004 - 17:30
#5
Der var nok noget arne :)
22. august 2004 - 17:31
#6
prøver lige og se....
22. august 2004 - 17:32
#7
Kan jeg få dig til at give et lille eksempel på hvordan man gør det ?
22. august 2004 - 17:34
#8
Giv mig 5 minutter
22. august 2004 - 17:35
#9
Det lyder fint..
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()); } } }
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.
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.
22. august 2004 - 17:50
#13
svar
22. august 2004 - 17:51
#14
hmm, kunne ikke lige finde ud af at give mere end det den originalt gav :(
22. august 2004 - 17:52
#15
22. august 2004 - 17:59
#17
Ja okay, jeg må være blind :) Men håber det går, tak for hjælpen.
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.