[C#]Array List naar componenten op Form

Pagina: 1
Acties:

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 24-11 21:01
Hallo,

Ik ben bezig met een klein studie projectje.
Nu heb ik het probleem dat een arraylist van PictureBoxes die ik op het form wil tekenen.
Dit is de code waar ik het in de array zet:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 private void DrawBuildings()
        {
            this.BuildingList = new PictureBox[this.GameHandle.Buildings.Count];

            for (int i = 0; i < this.GameHandle.Buildings.Count; i++)
            {
                
                this.BuildingList[i] = new PictureBox();
                this.BuildingList[i].BackColor = Color.Black;
                this.BuildingList[i].Top = this.Height - this.GameHandle.Buildings[i].Height;
                this.BuildingList[i].Left = this.GameHandle.Buildings[i].xCord;
                this.BuildingList[i].Width = this.GameHandle.Buildings[i].Width;
                
                //waarde zijn toegekent, bij de controls op het form zetten.
                //this.components.Add(this.BuildingList[i], "Building_" + i.ToString()); 

            }            

        }


Ik heb vanalles al geprobeerdt, die ook in het commentaar. Maar dit werkte niet. Wat ik dus nu wil is de picture boxes getekend op het form. Hoe ga ik dit aanpakken?

  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20:39

TeeDee

CQB 241

Krijg je een foutmelding?
Wat werkt er niet?

Heart..pumps blood.Has nothing to do with emotion! Bored


  • Depress
  • Registratie: Mei 2005
  • Laatst online: 24-11 21:01
Het werkt zoals het nu is allemaal. Maar het wordt niet op het form gezet. Ik heb dit geprobeerd, zie het met commentaar uitgevinkte code stukje.

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Wat is het probleem precies ?

https://fgheysels.github.io/


Verwijderd

Je moet je form als parent meegeven bij het creeëren van je pictureboxen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
code:
1
this.Controls.Add (theControl);

https://fgheysels.github.io/


  • Depress
  • Registratie: Mei 2005
  • Laatst online: 24-11 21:01
En wat houd de The control dan in? Want heb daar de buildinglist items inproberen te zetten met:
C#:
1
this.controls.add(this.BuildingList[i]);


En building list wordt met een loop doorlopen en i is de index.

Edit:
Het werkt, ik heb de parent toegevoegd en dan werkt het.

[ Voor 12% gewijzigd door Depress op 21-11-2006 14:02 ]


  • TeeDee
  • Registratie: Februari 2001
  • Laatst online: 20:39

TeeDee

CQB 241

C#:
1
2
3
4
5
6
7
8
9
10
        private void button1_Click(object sender, System.EventArgs e)
        {
            PictureBox box = new PictureBox();
            box.BackColor=Color.Black;
            box.Top = 100;
            box.Left=50;
            box.Width=125;
            box.Name = "Building_1";
            this.Controls.Add(box);
        }

Werkt bij mij prima. Als je nu this.components naar this.controls veranderd, komt het helemaal goed gok ik.

Heart..pumps blood.Has nothing to do with emotion! Bored


Verwijderd

TeeDee schreef op dinsdag 21 november 2006 @ 14:01:
Werkt bij mij prima. Als je nu this.components naar this.controls veranderd, komt het helemaal goed gok ik.
Wat zou een reden/noodzaak kunnen zijn om ze aan de controls van een form toe te voegen? Als je andere componenten op je form wil aanspreken dan hoef je niet door je pictureboxen te lopen. Je picture boxen kun je wel aanspreken via je array. Scheelt weer tijd als je heel veel pictureboxjes hebt gemaakt.

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Verwijderd schreef op dinsdag 21 november 2006 @ 21:42:
[...]

Wat zou een reden/noodzaak kunnen zijn om ze aan de controls van een form toe te voegen?
Eh, als je ze op je form wilt hebben, dan moet je ze aan de Controls collection toevoegen ipv aan components.
En je kan ze daarnaast ook evengoed in een aparte collection bijhouden, mocht je bv een paar keer snel je pictureboxen willen accessen.

https://fgheysels.github.io/


Verwijderd

whoami schreef op dinsdag 21 november 2006 @ 22:19:
[...]

Eh, als je ze op je form wilt hebben, dan moet je ze aan de Controls collection toevoegen ipv aan components.
En je kan ze daarnaast ook evengoed in een aparte collection bijhouden, mocht je bv een paar keer snel je pictureboxen willen accessen.
Ik doelde niet zozeer op die components maar waarom je ze überhaupt aan je form controls wil toevoegen. Dat voegt niks toe :P . Lijkt mij. Dus vroeg ik mij eigenlijk af wat je ermee wilde bereiken om ze aan je form toe te voegen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Tja, zoals ik al zei: als je die picture-boxen op je form wil zien...

https://fgheysels.github.io/


  • Depress
  • Registratie: Mei 2005
  • Laatst online: 24-11 21:01
Voor de duidelijkheid. De pictureboxen staan in een array. Vanuit daar kan ik ze ook makkelijk weer aanpassen met een for loop of pointer. Om even terug te komen op wat whoami zegt.

Verwijderd

@Whoami
Doen we het anders. We hebben de volgende code:

C#:
1
2
3
4
5
6
7
8
9
10
List<TextBox> textbsInF = new List<TextBox>();

TextBox t = new TextBox();
t.Parent = this;
t.Left = 0;
t.Width = 40;
t.Height = 20;
t.Top = 0;
t.Show();
textbsInF.Add(t);


Waarom zou je de controls.add manier gebruiken i.p.v. dit? Deze methode is flexibeler en sneller als je door de controls van een form wilt lopen.

  • Depress
  • Registratie: Mei 2005
  • Laatst online: 24-11 21:01
Zo heb ik het ook, iig in een variant ervan.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 private void DrawBuildings() 
        { 
            this.BuildingList = new PictureBox[this.GameHandle.Buildings.Count]; 

            for (int i = 0; i < this.GameHandle.Buildings.Count; i++) 
            { 
                 
                this.BuildingList[i] = new PictureBox(); 
                this.BuildingList[i].BackColor = Color.Black; 
                this.BuildingList[i].Top = this.Height - this.GameHandle.Buildings[i].Height; 
                this.BuildingList[i].Left = this.GameHandle.Buildings[i].xCord; 
                this.BuildingList[i].Width = this.GameHandle.Buildings[i].Width; 
                

            }             

        }
        //Deze regel code maakte het verschil.
        this.BuildingList[i].Parent = this; 

  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Verwijderd schreef op dinsdag 21 november 2006 @ 23:30:
@Whoami
Doen we het anders. We hebben de volgende code:

C#:
1
2
3
4
5
6
7
8
9
10
List<TextBox> textbsInF = new List<TextBox>();

TextBox t = new TextBox();
t.Parent = this;
t.Left = 0;
t.Width = 40;
t.Height = 20;
t.Top = 0;
t.Show();
textbsInF.Add(t);


Waarom zou je de controls.add manier gebruiken i.p.v. dit? Deze methode is flexibeler en sneller als je door de controls van een form wilt lopen.
En denk je nu dat die TextBox niet in de Control collection van de form zal staan ?
Dit:
t.Parent = this
is nl. equivalent als
code:
1
this.Controls (t);


Ga het maar eens na...
Of je nu de Parent property zet, of gewoon Controls.Add doet, de control zal in de Controls collection terechtkomen.

Daarbij zeg ik ook nog dat je je controls in een aparte collection kan bijhouden als je dat wil. Als je die control echter wil zien, dan moet hij op de een of andere manier in de Control collection van de container control moeten.

:z

[ Voor 6% gewijzigd door whoami op 22-11-2006 14:19 ]

https://fgheysels.github.io/

Pagina: 1