Avatar billede dex_dexter Nybegynder
08. marts 2006 - 12:47 Der er 9 kommentarer og
1 løsning

dynamiske labelnavn, tilgå i foreach

jeg har nogle labels der hedder lbl0, lbl1 osv.
dem vil jeg gerne hælde noget data ind i, men uden at skulle have en foreach til at finde den ud af controls på hele formen

kunne være fedt hvis man kunne lave en ("lbl" + i).text, men det kan jeg ikke lige gennemskue.

hvordan kan jeg gøre dette uden at skulle ud i en masse løkker for at søge formen igennem?
Avatar billede mikkel_sommer Nybegynder
08. marts 2006 - 13:36 #1
Tror ikke du du undgår at løbe dine controls igennem enten på den ene eller den anden måde.

Men du kan jo lave en metode som tager 2 parametre, en streng representation af den control hvis attribut du ønsker at sætte og en indeholdende værdien du ønsker den sat med.
Avatar billede mikkel_sommer Nybegynder
08. marts 2006 - 13:40 #2
En sådan metode kunne se sådan ud:

public void setControl(string control, string newValue)
{
    for(int i = 0; i < this.Controls.Count; i++)
    {
        Control c = (Control)this.Controls[i];
        if(c.Name == control)
        {
            c.Text = newValue;
        }
    }
}
Avatar billede dex_dexter Nybegynder
08. marts 2006 - 13:43 #3
så kan jeg lige så godt kode det statisk, det jeg prøver er at lave dette lidt mere dynamisk:

lbl0.text = input[0];
lbl1.text = input[1];
lbl2.text = input[2];
lbl3.text = input[3];
lbl4.text = input[4];

det holder nemligt ikke da jeg henter items ud fra en database, og det er ikke altid at jeg skal pille i dem alle sammen, en foreach som holder styr på "i" ville virke hvis jeg bare havde en metode at tilgå labels dynamisk
Avatar billede dr_chaos Nybegynder
08. marts 2006 - 17:05 #4
Du kan lave noget i denne stil

for(int i=0;i<etantal;i++)
{
((Label)Page.FindControl("lbl"+i.ToString())).Text = input[i];
}
Avatar billede dex_dexter Nybegynder
08. marts 2006 - 19:34 #5
eh..page.findcontrol lyder ret meget som noget der ligger i asp.net frameworket
Avatar billede dr_chaos Nybegynder
08. marts 2006 - 20:25 #6
sorry du har helt ret.
Avatar billede -xyz- Nybegynder
10. marts 2006 - 10:30 #7
Nej, ny synes jeg lidt du giver for nemt op på mikkel sommers svar
har lige ændret lidt i det, kan ikke garantere at det virker ;)
public void setControl(string control, string newValue)
{
    int i = 0;
    for(int i = 0; i < this.Controls.Count; i++)
    {
        if(i< 5)//i mindre end 5 eller hvormange det nu var
          i++;
        Control c = (Control)this.Controls[i];
        if(c.Name == "lbl"+i)
        {
            c.Text = newValue;
        }
    }
}
Avatar billede -xyz- Nybegynder
10. marts 2006 - 10:34 #8
og hvis du ikke vil løbe dem alle igennem kan du jo bare lave en break, når du har rettet det antal du skulle
Avatar billede dex_dexter Nybegynder
10. marts 2006 - 10:36 #9
det bliver noget fnidder og mere kompliceret end den løsning jeg allerede har.

tror løsningen vil være at hardcode de navne, det er ikke fordi at de ændrer sig men simpelthen for at gøre koden mere simpel, er allerede ud i en løsning med noglet for løkker, noglet ifs og en hel masse andet.
Avatar billede dex_dexter Nybegynder
18. juni 2006 - 21:05 #10
svar lige
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

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