C#.net Array van Checkboxes

Pagina: 1
Acties:

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
Hallo medetweakers, ik ben net begonnen met C#.net om is wat verder te komen dan VB6 .

Wat ik graaf wil doen is een Array van checkboxes maken of ik de checkboxes at runtime of at designtime maak is niet heel belangrijk, hoewel ik een voorkeur voor het eerste heb.

ik heb een vakje van 5x5 checkboxes en wil deze vullen met vinkjes afhankelijk van de instructie die ik geef. Op dit moment gebruik ik daar de volgende functie om een array te maken met 1-en en 0-en (wel vinkje, geen vinkje)
(dit kan natuurlijk ook in een loopje later, maar dat kan ik al wel :9 )
C#:
1
2
3
int[,] iArray = new int[5, 5];
iArray[1,1] = 0;
iArray[1, 2] = 1;


Hoe zorg ik er voor dat ik niet een lap code als

C#:
1
2
3
4
5
if (iArray[1,1] = 0)
{
checkbox1.checked = true
}
//etc.

hoef te typen?

Ik kan nieuwe checkboxes maken dmv:
C#:
1
2
3
4
5
6
7
        
private CheckBox CC;  
//------------------------------
CC = new CheckBox();
CC.Left = 10;
CC.Top = 10;
Controls.Add(CC);


maar dan kan ik nog steeds niet loopen met bijvoorbeeld
C#:
1
2
3
int i = 0
CC(i).checked = true
i = i +1


Ik heb het ook niet voor elkaar gekregen om een array van checkboxen te maken.

Ik heb al heel wat gegoogled maar ik kan niets vinden, misschien zoek ik verkeerd, met termen in de trand van"array with objects"?

Hoop dat iemand me kan helpen :)

~ Mijn prog blog!


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Als je Controls.Add ( ) doet, kan je wel weten dat die Checkbox ergens aan toegevoegd wordt: hij wordt toegevoegd aan de control-collection van een container-control. Dat kan de Form zijn, dat kan een panel zijn, ....

Je kan dus door de container-collection van die form / panel / waar ze ook op staan loopen, en ze gaan checken / unchecken.

Wat je kan doen:
Een UserControl maken, een method geven die zegt 'CreateCheckboxes' bv, en daar geef je een parameter aan mee (hoeveel checkboxes), en die method gaat dan de checkboxen op je control gaan maken.
Met een foreach kan je dan door de control-collection gaan loopen:
code:
1
2
3
4
5
6
7
8
9
10
11
public void CheckAllCheckboxes()
{
foreach( Control c in Controls )
{
   Checkbox bx = c as Checkbox;
   if( bx != null )
   {
    bx.Checked = true;
   }
}
}

bv

https://fgheysels.github.io/


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Waarom lukt het je niet om een Array van Checkboxen te maken?

C#:
1
2
3
4
5
6
7
8
9
CheckBox[,] checkboxes = new CheckBox[5,5]
for(int i = 0; i < checkboxes.GetLength(0); i++ )
{
    for(int j = 0; j < checkboxes.GetLength(1); j++ )
    {
         checkboxes[i,j] = new CheckBox();
         checkboxes[i,j].Checked = true; // of false natuurlijk
    }
}


offtopic:
Bestaat er ook een niet .NET versie van c#? ;)

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
@ Whaomi, hardstikke bedankt, ben dus net begonnen met C# maar ik denk dat ik begrijp wat je bedoelt :) dit lijkt me een mooie methode om dit allemaal te controleren.


@ RWB, ... |:( doh! ik heb er gewoon totaal niet aan gedacht om als type 'checkbox' te gebruiken, ik zat te klieren met static dat had ik ergens gezien op internet.. ook zit ik nog te klooien met dat VB/C# precies verkeerd om is
(als in)
VB: DIM i as integer
C#: int i

Wilde nog een wijsneuzerige opmerking maken over C# en niet .net :P maar na het raadplegen van wikipedia denk ik dat ik dat maar beter niet kan doen ;)
Hardstikke bedankt voor jouw oplossing, ik ga jouw oplossing gebruiken om de checkboxen te maken, (kan ik ook lekker dynamisch meer of minder vakjes maken) en daarna Whaomi's methode om na de eerste keer de vinkjes te zetten.

Beide hardstikke bedankt, :) nu kan ik weer aan het C#-en om eindelijk is wat onafhankelijker te worden van VB6!


EDIT:

Zo de code werkt allemaal zo als het hoort, :P ik doe er 7, 1/10e seconde over om 100 checkboxes te generen, ze allemaal een vinkje te geven en hun naam in een lijstje te zetten, gosh ik heb een nieuwe computer nodig :P

EDIT: typo niet 100 checkboxes in 7sec maar 1000 :P

[ Voor 21% gewijzigd door roy-t op 13-12-2006 08:24 . Reden: Bijvoegsels ]

~ Mijn prog blog!


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Zo de code werkt allemaal zo als het hoort, :P ik doe er 7, 1/10e seconde over om 100 checkboxes te generen, ze allemaal een vinkje te geven en hun naam in een lijstje te zetten, gosh ik heb een nieuwe computer nodig
Ik denk dat je misschien ook eerder eens je code moet optimalizeren.
Verder vraag ik me af waarom je een array wilt gebruiken, als die checkboxen zowiezo al in de ControlCollection staan; waarom dus 2x een referentie bijhouden naar dezelfde control ?

https://fgheysels.github.io/


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
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
27
28
29
30
private CheckBox CC;  

        private void button3_Click(object sender, EventArgs e)
        {
            int TIJD1 = DateTime.Now.Second;            
            int TIJD1m = DateTime.Now.Millisecond;
            listBox1.Items.Add(TIJD1 + " " + TIJD1m);
            
            for (int A = 0; A < 1000; A++)
            {
                CC = new CheckBox();
                CC.Left = 10*A;
                CC.Top = 10*A;
                Controls.Add(CC);
            }
            
            foreach(Control CC2 in Controls)
            {
            CheckBox bx = CC2 as CheckBox;
                if(bx != null )
                {
                bx.Checked = true;
                listBox1.Items.Add(bx.Name);
                }
             }

            int TIJD2 = DateTime.Now.Second; 
            int TIJD2m = DateTime.Now.Millisecond;
            listBox1.Items.Add(TIJD2 + " " + TIJD2m);
          }


Ik denk niet dat er al vrij veel aan geoptimaliseerd kan worden, ik had wel een typo gemaakt, het zijn er 1000. Ik gebruik op dit moment ook maar een optie om erdoor heen te gaan :)

~ Mijn prog blog!


  • whoami
  • Registratie: December 2000
  • Laatst online: 18:04
Niet ? Je hebt 2 loops, je kan er één van maken.
code:
1
2
3
4
5
6
7
8
9
10
11
listBox1.BeginUpdate();
for( int i = 0; i < 1000; i++ )
{
    cc = new Checkbox();
    cc.Left = ... ;
    cc.Right = ... ;
    Controls.Add (cc);
    cc.Checked = ...
    listBox1.Items.Add ( ... );
}
listBox2.EndUpdate();


Daarnaast denk ik dat je ook gebruik kunt maken van de SuspendLayout en ResumeLayout methods, en eventueel kan je er voor kiezen om je controls eerst in een array te plaatsen, en dan die array dmv AddRange aan je control-collection toe te voegen.

[ Voor 29% gewijzigd door whoami op 13-12-2006 09:19 ]

https://fgheysels.github.io/


  • mulder
  • Registratie: Augustus 2001
  • Laatst online: 09:27

mulder

ik spuug op het trottoir

Ik denk niet dat er al vrij veel aan geoptimaliseerd kan worden
Ik wel, je hebt maar 1 loopje nodig in je code :)


Edit : op de seconde ;)

[ Voor 13% gewijzigd door mulder op 13-12-2006 09:09 ]

oogjes open, snaveltjes dicht


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
string TIJD1 = DateTime.Now.Second + " / " + DateTime.Now.Millisecond;

            listBox1.BeginUpdate();
                
                listBox1.Items.Add(TIJD1);
                this.SuspendLayout();
                for (int A = 0; A < 1000; A++)
                   {
                    CC = new CheckBox();
                    CC.Location = new Point(A*10,A*10);
                    Controls.Add(CC);
                   }
                   this.ResumeLayout();

                TIJD1 = DateTime.Now.Second + " / " + DateTime.Now.Millisecond;
                listBox1.Items.Add(TIJD1);
            
            listBox1.EndUpdate();


Hardstikke bedankt jongens, met deze code maak ik 1000 checkboxjes in 2, 3/10 seconden das toch een stukje sneller mbt laadtijden :)

Dit is toch ook wel heel wat intressanter dan een Hallo-Wereld applicatie, echt hardstikke bedankt, ik kan nu achteraf lekker gaan controleren op vinkjes e.d :)

(edit: ik weet dat de code nu ietsjes andere dingen doet, maar nu kan ik testen wat ik allemaal wil met dit mysterieuze vakjes programma :P)

[ Voor 6% gewijzigd door roy-t op 13-12-2006 13:54 ]

~ Mijn prog blog!

Pagina: 1