Avatar billede noobsaibot Nybegynder
21. oktober 2006 - 16:37 Der er 10 kommentarer og
1 løsning

Loope gennem controls på en Web User Control

Jeg har prøvet at loope gennem mine controller:

foreach(WebControl c in this.Controls)
                    {

                        if(c is Label)
                        {
                            Label lbl = (Label)c;
                            lbl.Enabled = false;
                        }
                    }

Men jeg kan får: Specified cast is not valid.
Avatar billede noobsaibot Nybegynder
21. oktober 2006 - 16:37 #1
Hvad gør jeg forkert?
Avatar billede hacked Nybegynder
21. oktober 2006 - 17:45 #2
this.Controls returnere da en ControlCollection. I den ControlCollection er der yderligere ControlCollections.
Avatar billede dj_uncas Nybegynder
21. oktober 2006 - 17:48 #3
Det er fordi UserControl.Controls (ganske rigtigt en ControlCollection) ikke indeholder WebControls, men bare Controls. Dtte burde virke:

foreach( Control ctl in this.Controls )
{
    if( ctl is Label )
    {
        Label lbl = (Label)ctl;
        lbl.Enabled = false;
    }
}
Avatar billede dj_uncas Nybegynder
21. oktober 2006 - 17:50 #4
Du skal dog være opmærksom på at ControlCollections også kan have under-collections, men de ligger ikke direkte på selve collection'en, men på Controls. Dvs:

foreach( Control ctl in this.Controls )
{
    foreach( Control ctl2 in ctl.Controls )
    {
    }
}

osv...
Avatar billede hacked Nybegynder
21. oktober 2006 - 17:52 #5
Glem sidste sætning efter punktum.
ControlCollection c = this.form1.Controls;
foreach (Control control in c)
{
  ListBox1.Items.Add(new ListItem(""+control.GetType()));
}

Når du løber din collection igennem prøver du sandsynligvis at typecaste nogle Controls der ikke er af typen WebControl. Sandsynligvis et LiteralControl.
Avatar billede hacked Nybegynder
21. oktober 2006 - 17:53 #6
Brug Control istedet for WebControl.
Avatar billede hacked Nybegynder
21. oktober 2006 - 18:04 #7
Derudover - Hvis du blot vil have fat i controls der findes i din form kan du bruge this."dinForm".Controls.
Avatar billede noobsaibot Nybegynder
21. oktober 2006 - 18:48 #8
Jeg har allerede prøvet:

foreach( Control ctl in this.Controls )
{
    if( ctl is Label )
    {
        Label lbl = (Label)ctl;
        lbl.Enabled = false;
    }
}

Men får:
The type or namespace name 'Control' could not be found (are you missing a using directive or an assembly reference?)
Avatar billede dj_uncas Nybegynder
21. oktober 2006 - 19:04 #9
Så skal du tilføje en using:

using System.Web.UI;
Avatar billede noobsaibot Nybegynder
21. oktober 2006 - 19:10 #10
Doh :D

Takker for jeres svar, men det var dj_uncas der hjalp mig med min "lille brøler".

Tak for det :) Smid et svar.
Avatar billede dj_uncas Nybegynder
21. oktober 2006 - 19:34 #11
Hehe.. Det er noget vi alle sammen kommer ud for en gang i mellem når vi har kæmpet længe med et eller andet.
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