Toon posts:

C# detecteren wat labels en butons zijn

Pagina: 1
Acties:
  • 42 views sinds 30-01-2008

Verwijderd

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
Voor een C# projectje ben ik bezig met het kijken welke objecten labels zijn dmv

         for (int i = 0; i < this.Controls.Count; i++)
            {
                string StrLabelname = (this.Controls[i].Name);
                if (StrLabelname.Contains("lbl"))
                   {
                    // doe dingen
                   }
            }


deze doet wel alles wat ik wil omdat ik alle labels prefix met lbl.
is er op een of andere manieren er achter te komen of de control en label is zonder dat er naar de name word gekeken

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Met typeof() kan je kijken wat het type van een object is, en dus ook achterhalen of iets een label of button is.

[ Voor 25% gewijzigd door AtleX op 07-07-2007 15:37 ]

Sole survivor of the Chicxulub asteroid impact.


Verwijderd

Wat ik zelf mooier vind is het is keyword...

C#:
1
2
3
4
if (label1 is Label)
{
  // type is Label
}


Op deze manier kan je ook nog kijken of het een subtype is van label, stel je hebt je eigen class geschreven die erft van Label.

[ Voor 34% gewijzigd door Verwijderd op 07-07-2007 16:08 ]


  • Alex
  • Registratie: Juli 2001
  • Laatst online: 10-11 17:17
En daarna wel ff mooi converten en niet casten:
C#:
1
2
3
4
if (label1 is Label) 
{ 
   Label l1 = label1 as Label;
}

Scheelt je weer een hoop performence en onverwachte fouten :).

[ Voor 6% gewijzigd door Alex op 07-07-2007 18:57 ]

Deze post is bestemd voor hen die een tegenwoordige tijd kunnen onderscheiden van een toekomstige halfvoorwaardelijke bepaalde subinverte plagiale aanvoegend intentioneel verleden tijd.
- Giphart


  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 21:30
Alex schreef op zaterdag 07 juli 2007 @ 18:57:
En daarna wel ff mooi converten en niet casten:
C#:
1
2
3
4
if (label1 is Label) 
{ 
   Label l1 = label1 as Label;
}

Scheelt je weer een hoop performence en onverwachte fouten :).
offtopic:
Die eerste "is" kun je helemaal weg laten als je gebruik maakt van "as". Als je gebruik maakt van "as" wordt er direct een cast gedaan, en als het niet lukt is de variabele null. Dan krijg je iets als
Label label = anderelabel as Label;
if( label != null) {
//doe leuke dingen.
}

  • whoami
  • Registratie: December 2000
  • Laatst online: 23:28
Alex schreef op zaterdag 07 juli 2007 @ 18:57:
En daarna wel ff mooi converten en niet casten:
C#:
1
2
3
4
if (label1 is Label) 
{ 
   Label l1 = label1 as Label;
}

Scheelt je weer een hoop performence en onverwachte fouten :).
Waarom ?
Waarom zou je niet doen:
code:
1
2
3
4
if( label1 is label )
{
  Label l1 = (Label)label1;
}
Je hebt toch eerst gechecked of het een label is, en , casten is sneller.
Wat je ook kan doen is dit:
code:
1
2
3
4
Label l1 = control as Label;
if( l1 != null )
{
}


edit:
Wat Sybr_E-N dus zegt, maarja, hij moest het maar niet in 'offtopic' tags posten, anders had ik het zeker gezien. :P

[ Voor 10% gewijzigd door whoami op 07-07-2007 20:33 ]

https://fgheysels.github.io/


  • Zr40
  • Registratie: Juli 2000
  • Niet online

Zr40

Moderator General Chat

heeft native IPv6

whoami schreef op zaterdag 07 juli 2007 @ 20:32:
[...]
code:
1
2
3
4
if( label1 is label )
{
  Label l1 = (Label)label1;
}
Je hebt toch eerst gechecked of het een label is, en , casten is sneller.
offtopic:
Helaas, het 'as' keyword is sneller dan casten. Dit is omdat bij casten eventuele conversieoperators aangeroepen kunnen worden, en je een InvalidCastException kan krijgen als de type niet compatible is en er geen conversieoperator aanwezig is. Het 'as' keyword probeert geen conversie, en wanneer de type incompatible is krijg je null in plaats van een exception.

Let wel, het snelheidsverschil is niet schokkend groot. Het is iets wat je alleen in benchmarks zal zien, of misschien in zeer strakke loops.

[ Voor 9% gewijzigd door Zr40 op 07-07-2007 20:48 ]


Verwijderd

Assignen kost ook tijd. Volgens mij zijn we hier gezellig aan het mierenneuken...

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Verwijderd schreef op zaterdag 07 juli 2007 @ 23:00:
Assignen kost ook tijd. Volgens mij zijn we hier gezellig aan het mierenneuken...
Ik zie niet echt het probleem in dit geval. Er worden geen heksentoeren uitgehaald voor micro-optimalisering, de code blijft leesbaar, en het wordt (zij het marginaal) sneller. Het is niet erg als je het niet doet, maar je gaat er enkel maar op vooruit als je het wel doet.

If you can't beat them, try harder


Verwijderd

Dat bedoel ik. Wat boeit 't dat 'as' sneller is dan een cast?
(In Delphi is 't trouwens andersom, daar is een cast sneller dan 'as')

[ Voor 37% gewijzigd door Verwijderd op 07-07-2007 23:45 ]


  • Zr40
  • Registratie: Juli 2000
  • Niet online

Zr40

Moderator General Chat

heeft native IPv6

Verwijderd schreef op zaterdag 07 juli 2007 @ 23:00:
Assignen kost ook tijd. Volgens mij zijn we hier gezellig aan het mierenneuken...
Maar met een assignment kan je niet casten :)

Zoals ik al zei, het verschil in snelheid zul je normaal gesproken niet merken. Er zit echter wel een verschil in gedrag tussen gewoon casten en gebruik van 'as'.

Verwijderd

Verwijderd schreef op zaterdag 07 juli 2007 @ 16:06:
Wat ik zelf mooier vind is het is keyword...

C#:
1
2
3
4
if (label1 is Label)
{
  // type is Label
}


Op deze manier kan je ook nog kijken of het een subtype is van label, stel je hebt je eigen class geschreven die erft van Label.
Bestaat er in C# ook een 'is not'? Iets als ..

code:
1
2
3
4
if (label1 is not Label) 
{ 
  // type is not Label 
}

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Verwijderd schreef op zondag 08 juli 2007 @ 19:21:
[...]


Bestaat er in C# ook een 'is not'? Iets als ..

code:
1
2
3
4
if (label1 is not Label) 
{ 
  // type is not Label 
}
C#:
1
2
3
4
if (!(label1 is Label) 
{   
   //blabla
}

Going for adventure, lots of sun and a convertible! | GMT-8


  • whoami
  • Registratie: December 2000
  • Laatst online: 23:28
Verwijderd schreef op zondag 08 juli 2007 @ 19:21:
[...]


Bestaat er in C# ook een 'is not'? Iets als ..

code:
1
2
3
4
if (label1 is not Label) 
{ 
  // type is not Label 
}
Sorry, maar op dergelijke vragen kan je toch makkelijk zelf een antwoord vinden in de MSDN.

https://fgheysels.github.io/

Pagina: 1

Dit topic is gesloten.