06. februar 2003 - 14:34Der er
28 kommentarer og 2 løsninger
lave opbjecter i et loop
hvordan kan denne kode laves, så den automatisk laver 5 stk labels, som ligger ved siden af hinanden med hvert sit navn? eller kan man stille det op i en tabel som et html dokument?
------ Grundkode ------ For x = 1 To 5 Me.lbldate.Location = New System.Drawing.Point(120, 80) Me.lbldate.Name = "lbldate11" Me.lbldate.Size = New System.Drawing.Size(48, 40) Me.lbldate.TabIndex = 1 Next
------ Havde tænk mig en lign kode for hver (bare med +50 til koordinater), men ved ikke om det kan lade sig gøre ------
For x = 1 To 5 Me.lbldate1.Location = New System.Drawing.Point(120, 80) Me.lbldate1.Name = "lbldate1" Me.lbldate1.Size = New System.Drawing.Size(48, 40) Me.lbldate1.TabIndex = 1 Next
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
for (int i = 0; i < 5; i++) { string navn = "label"+ i; int pos = (50*i)+80; ((Label)navn).Location = New System.Drawing.Point(120, pos) ((Label)navn).Name = navn ((Label)navn).Size = New System.Drawing.Size(48, 40) ((Label)navn).TabIndex = i }
nja... det er til c#... uhm... lad mig da lige prøve om jeg kan skrive det om til vb ;)
Dim lblDate1 As Label = new Label() Dim lblDate2 As Label = new Label() Dim lblDate3 As Label = new Label() Dim lblDate4 As Label = new Label() Dim lblDate5 As Label = new Label()
Dim i As Integer = 0 For i = 0 To 5 Dim navn As String = "lblDate"& i Dim pos As Integer = (50*i)+80
((Label)navn).Location = New System.Drawing.Point(120, pos) ((Label)navn).Name = navn ((Label)navn).Size = New System.Drawing.Size(48, 40) ((Label)navn).TabIndex = i
midas_dk>> hmm... skod... er der ikke en form for eval() funktion, ligesom i javascrit, hvor man kan oprette et variabelnavn ved at sætte to variabler sammen?! ... problemet med din fremgangsmåde er at du kun opretter dine labels "lokalt" i din kodeblok... du SKAL oprette dem "globalt" i din klasse, og derefter refererer til dem inde i din For-løkke.
midas_dk>> din metode kan forresten godt bruges i asp.net (med lidt modifikationer selvfølgelig)... du må ikke forveksle winforms med webforms, da teknikken er lidt anderledes...
midas>> man skal lige vende sig til forskellen. Asp.net er jo ligesom et state-less miljø, hvor en side bliver executed, og det er så det. I Winforms bliver ens form jo ved med at være åben, og hvis man vil indsætte en label kan man ikke bare bruge Add(object) metoden, som man kan i asp.net, for... hvad komemr labelen til at hedde? man kan jo ikke have 5 labels der hedder det samme (som jo ville være tilfældet i dit eksempel ;)
nej, den kendte jeg ikke... har ikke haft brug for at konvertere den vej... det er mere fra vb.net til c#, og der klarer jeg mig for det meste med det jeg kan indenfor vb.net :)
man skal aldrig sige aldrig... ;) uhm... hvad med evt at smide dine labels i en arraylist?
Dim lblDate1 As Label = new Label() Dim lblDate2 As Label = new Label() Dim lblDate3 As Label = new Label() Dim lblDate4 As Label = new Label() Dim lblDate5 As Label = new Label() Dim arr As ArrayList Dim i As Integer
this.SuspendLayout(); for (int i = 0; i < 10; i++) { int pos = 50 + i*80; Label l = new Label(); l.Location = new System.Drawing.Point(pos, 20); l.Size = new System.Drawing.Size(100, 100); l.Name = "lbl"+i.ToString(); l.Text = "heeeeeeeeej";
this.Controls.Add(l); }
this.ResumeLayout(false);
men så vil du have problemer med at fange teksten i din tekstbox senere, da du ikke rigtig vil have nogen reference til den... det kan dog klares ved at loope igennem alle dine kontroller til du finder den rigtige.. f.eks. sådan her
foreach(Control c in this.Controls) { if (c.GetType() == typeof(Label)) { if (((Label)c).Name == "lbl1") { MessageBox.Show(((Label)c).Text); } } }
cyberfessor>> Nej! Du tilføjer dem blot til ControlCollection'en og derved kræver du en søgning hver gang du skal tilgå en dynamisk label. Ved at gemme dem i et arrayet spares denne søgning med tidskomplektsitet O(n).
ja, okay.. det er selvfølgelig rigtig nok... det overså jeg... :)
Synes godt om
Ny brugerNybegynder
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.