[C#]Properties UserControl niet te gebruiken ?

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • pkouwer
  • Registratie: November 2001
  • Laatst online: 16:29
Op basis van dit topic ben ik verder gegaan en heb een array van UserControls gemaakt. Dit UC geeft een aantal eigen gemaakte properties. Ik heb het array gemaakt in een bepaalde functie. Nu wil ik een aantal properties aanpassen in een andere functie, maar dit lukt me niet omdat deze properties niet "beschikbaar" gesteld worden door de IDE. Ik gebruik deze code:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
            while (rdr.Read())
            {
                foreach (Control c in Controls)
                {
                    if (c.Name == rdr["kaartnummer"].ToString())
                    {
                        MessageBox.Show("Something changed");
                        switch (rdr["status"].ToString())
                        {
                            case "1":
                                c.propKleur = "geel";
                                break;
                            case "2":
                                c.propKleur = "groen";
                                break;
                            case "3":
                                c.propKleur = "rood";
                                break;
                        }


                    }

                }

            }


bij de regels met c.propKleur geeft hij dus aan dat propKleur niet geldig is. Als ik het Switch-statement weglaat, runt hij wel en zie ik de MessageBox verschijnen. Hoe los ik dit op ?

Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
Dat komt omdat C# niet weet dat Control c de functie propKleur ondersteund, dit is niet gedefinieerd in de interface van Control. (Maar in de interface van jouw eigen control).

Iets als dit werkt wel.

C#:
1
2
3
4
5
6
7
8
foreach(Control c in Controls)
{
     if(c is typeof(MyUserControl)
    {
        MyUserControl muc = (MyUserControl)c;
       //switch etc..
    }
}


Dit is trouwens vrij basic encapsulation, dus nog even inlezen op die term :).

overigens bedoel ik bij interface niet specifiek IMyInterface maar meer hoe een Interface/(Abstract)Class defineert welke methoden en properties beschikbaar zijn voor classes die daar kinderen van zijn)

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Haan
  • Registratie: Februari 2004
  • Laatst online: 19:28

Haan

dotnetter

@roy-t: hoewel je gelijk hebt, vraag ik me af of je uitleg een beetje begrijpelijk is voor de TS, ik had er zelf nog wat moeite mee ;)

Ik zou eerder 'inheritance' noemen. De Control class is de base class voor heel veel control elementen en bevat een aantal properties die voor alle control elementen beschikbaar zijn. Iedere class die van de Control class erft, definieert eigen properties indien nodig. Zo definieert een HyperLink control bijvoorbeeld een 'NavigateUrl' property. De Control class is zich daarvan niet bewust, die 'kent' alleen zijn eigen properties. De code van roy-t kan je dus gebruiken om specifiek naar 'MyUserControl' te kijken.
Om het toch weer iets ingewikkelder te maken": met LINQ kan je dat nog iets eleganter doen:
C#:
1
2
3
4
foreach (MyControl myControl in Controls.OfType<MyControl>())
{
    // switch
}

Kater? Eerst water, de rest komt later


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 08-09 11:33
@haan,

ja ik zat echte te klooien hoe ik dit uit zou leggen :p.

Trouwens, dat Linq truukje Controls.OfType<> kende ik niet, dat is wel erg handig!

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
met de is operator gebruik je btw geen typeof ;)

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

Je zou ook nog extensions kunnen gebruiken om zo de standaard Control uit te breiden met andere properties.

[ Voor 4% gewijzigd door Verwijderd op 11-01-2011 09:27 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Verwijderd schreef op dinsdag 11 januari 2011 @ 09:24:
Je zou ook nog extension attributes kunnen gebruiken om zo de standaard Control uit te breiden met andere properties.
Euh, ik zou heel, heul, héél terughoudend zijn hiermee. Lees dit eens.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij

Pagina: 1