C# Indirection

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • hiekikowan
  • Registratie: Februari 2011
  • Laatst online: 07-09 17:37
Hoi!

Sinds twee weken ben ik bezig met C# en ik loop vast op een bepaald onderdeel waarover ik op internet niet heel veel kan vinden.

Belangrijk om te weten is dat ik eerder in Javascript aan een soortgelijk projectje heb gewerkt, hierin is onderstaand probleem heel simpel op te lossen, met een techniek die op internet als indirection te vinden is.

Ik wil in C# een vijftal dobbelstenen random op het scherm laten zien. Hiervoor maak ik vijf random waardes aan. De dobbelstenen hebben als naam 'dice'+waarde. De dobbelstenen wil ik middels een for-loop laten tekenen.

De loop ziet er als volgt uit:

C#:
1
2
3
for(int i=0;i<=4;i++){
      imgDice0 = //waarde;
}


In het voorbeeld staat er 'imgDice0'. Dit is de naam van een picturebox in mijn applicatie. Nu wil ik die nul iedere keer in de loop vervangen voor de waarde van i, zoiets als hieronder (dit werkt echter niet):

C#:
1
2
3
for(int i=0;i<=4;i++){
     imgDice+i = //waarde;
}


Weet iemand hoe dit bereikt kan worden? Wanneer ik op internet op de term 'indirection C#' zoek komt er geen informatie, en zijn die problemen vaak heel iets anders als waar ik naar op zoek ben.

Alvast bedankt! :)

Acties:
  • 0 Henk 'm!

  • martijn00
  • Registratie: Juli 2006
  • Laatst online: 13-09 16:11
Je moet eerst een picturebox aanmaken voordat je er een naam aan kan geven. Voorbeeld code:

code:
1
2
3
4
5
            for (int i = 0; i < 5; i++)
            {
                PictureBox dice = new PictureBox();
                dice.Name = "dice" + i;
            }

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je moet helemaal niet met indirection aan de slag (willen) maar gewoon met een array (of list of colletion of...) van controls/objecten/whatever.

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


Acties:
  • 0 Henk 'm!

  • P-Storm
  • Registratie: September 2006
  • Laatst online: 17-09 23:32
Ik gok dat je niet meer zoals vroeger met Visual Basic de variabelnaam kon samenstellen met variabelen. Je kan beter met een collection aan de slag gaan voor de controls.

Wat RobIII zegt dus

[ Voor 3% gewijzigd door P-Storm op 27-04-2012 18:35 ]


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Het trefwoord is hier control array. Mij lijkt iets zoals dit het handigst, dus ergens na InitializeComponent een member zetten.
C#:
1
imgDice = new[] { imgDice0, imgDice1, imgDice2, imgDice3 };

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • hiekikowan
  • Registratie: Februari 2011
  • Laatst online: 07-09 17:37
Ah... ok, zit ik alleen nog met de vraag hoe ik dit in Visual Studio voor elkaar kan krijgen.

Ik heb via de grafische interface de elementen erin gesleept en deze namen gegeven. Kan ik deze namen nu gewoon verzamelen in zo'n array of moet ik echt vanuit de code de elementen aan gaan maken en positioneren...?

In ieder geval alvast bedankt en ik zal morgen zelf ook even aan het proberen gaan!

Acties:
  • 0 Henk 'm!

  • Kevinp
  • Registratie: Juni 2001
  • Laatst online: 10:55
Of de controls erin slepen en als het er altijd 4 zijn dan kan je ze gewoon met

pictureboxname.image = image.fromfile(filname) (synax weet ik niet precies maar dit klopt zo ongeveer).

Of je voegt ze toe

window(of panel).controls.add(picturebox).

De rest is hetzelfde.

je moet wel bepalen waar je alles plaatst.

d'r is maar één ding in het leven wat moet, en dat is dood gaan.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
bdalenoord schreef op vrijdag 27 april 2012 @ 22:39:
Ah... ok, zit ik alleen nog met de vraag hoe ik dit in Visual Studio voor elkaar kan krijgen.
Visual studio is een IDE; C# is een programmeertaal ;)
bdalenoord schreef op vrijdag 27 april 2012 @ 22:39:
Ik heb via de grafische interface de elementen erin gesleept en deze namen gegeven. Kan ik deze namen nu gewoon verzamelen in zo'n array
Why not? Je moet even beseffen/het kwartje moet even vallen dat de IDE voor jou gewoon wat code uitpoept (in een designer file) en die wordt dan ook aangeroepen met InitializeComponent(). Die designerfile wil je niet aan komen, want zodra je iets met je controls doet in de grafische interface zal VS die file opnieuw genereren. Maar verder kun je die code beschouwen als "zelfgeschreven" en is er dus geen verschil tussen controls die je "zelf" in code maakt of die de IDE voor je heeft gemaakt. Je kunt dus gewoon doen wat pedorus voorstelde. Verder kun je ook eens naar de ControlCollection van controls kijken; die heet methods als Find().

Over die designer file(s): Je zult zien dat Visual Studio voor jou Partial classes maakt, bijvoorbeeld:
C#:
1
public partial class Form1 : Form

Daarmee kan de IDE makkelijk voor jou de "layout en andere boring boilerplate code" voor jou verborgen houden en kun jij je concentreren op de rest in een "mooie schone file".

[ Voor 24% gewijzigd door RobIII op 27-04-2012 22:57 ]

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


Acties:
  • 0 Henk 'm!

  • hiekikowan
  • Registratie: Februari 2011
  • Laatst online: 07-09 17:37
Inmiddels is het gelukt... bedankt voor de hulp!

De methode met de control-array is gelukt en ik kan nu de dobbelstenen netjes laten wijzigen!!!
Pagina: 1