Kezdőoldal » Számítástechnika » Programozás » C#-ban hogyan tudom a ComboBox...

C#-ban hogyan tudom a ComboBox tartalmát randomizálni? (Bővebben lenn)

Figyelt kérdés

Szeretnék egy programot amin van 'N' db ComboBox és egy Button.

A program lényege:

Egy ComboBox-ban 50 különböző sor van felvéve, mindegyik ComboBox-ban ugyan ezek a sorok vannak.


A programnak azt kellene csinálnia, hogy a gomb lenyomásakor az összes ComboBox tartalmát randomizálja úgy, hogy ne legyen köztük két egyforma.


Ezt hogyan tudnám megcsinálni?

Gombolom a Gomb Click eseményére kellene írni valamit.

Ehhez kérnék segítséget.


Továbbá, esetleg azt is meg lehetne-e csinálni, hogy a ComboBox-ok számát is randomizálom? Mert nem minden esetben lenne szükség az 'N' számú ComboBox-ra.

A segítségeket előre is köszönöm!


2011. szept. 1. 16:58
 1/4 A kérdező kommentje:
Vagy esetleg azt meg lehetne csinálni, hogy valahol beállítok egy számot 1 és 'N' között és csak annyi combobox jelenik meg?
2011. szept. 1. 17:00
 2/4 anonim ***** válasza:

Szépen megfogod:


for(int i=0; i<N; i++)

{

ComboBox b = new ComboBox();

b.Left = ...

b.Top = ...

this.Controls.Add( b );

}

és van n db comboboxod


A tartalmat meg egyszerű hogy 1x forduljon elő egy elem.

Random r = new Random();

List<int> items = new Items(){ 1,2,3,4,5,6,7,8,9,10 };

while( items.Count>1 )

{

int index = r.Random(0, items.Count-1);

int actual = items[index];

...

items.RemoveAt(index);


}

2011. szept. 1. 20:55
Hasznos számodra ez a válasz?
 3/4 A kérdező kommentje:

Köszönöm a választ.


Betettem a gombra ezt:

for(int i=0; i<'N'; i++)

{

ComboBox b = new ComboBox();

b.Left = 180;

b.Top = 50;

this.Controls.Add( b );

}

N egy már korábban generált random szám 8 és 15 között.

A gond az, hogy csak 1db comboboxot hoz létre és az is üres.

Vagy lehet, hogy létrehozza csak egymás alatt és nem látom a többit?

Ilyenkor mit lehet tenni?

Hol tudom előre megadni milyen értékek szerepeljenek a randomra létrehozott combobox-okban?


Ezt a kódot pedig a SelectedIndexChanged seményre kell tennem?

Random r = new Random();

List<int> items = new Items(){ 1,2,3,4,5,6,7,8,9,10 };

while( items.Count>1 )

{

int index = r.Random(0, items.Count-1);

int actual = items[index];

... // Ide mit?

items.RemoveAt(index);


}


Bocsi, ennyire még nem megy, hogy teljesen átlássam.

Előre is köszi!

2011. szept. 2. 09:43
 4/4 anonim ***** válasza:

Nos igen, mindegyiknek ugyanaz a poziciója, vagyis csak 1 et látsz, kitalálsz valami okos dolgot hogy kiszámold a pozíciókat.


Az elemeket megadod ahol létrehozod a comboboxot, persze lehet később is módósítani, ez ugyanolyan kontrol mint ha a szerkesztő nézetben ráhúznád.

Esetleg eltárolhatod egy listában és úgy egyszerűen elérheted az összes comboboxot;

a metóduson kívül deklarádod: List<ComboBox> comboBoxok = new List<ComboBox>();


aztán szépen hozzáadogatod:



for(...)

{

int db=0;

ComboBox b = new ComboBox();

b.Left = i*50; így egy sorba kerül mind, ha máshogy szeretnéd gondolodj rajta kicsit :D

b.top = 50;


Ha itemsben van az összes elem, akkor gondolom szétszeretnéd osztani, tehát elég ha csak n darab elemet raksz 1 comboboxba


while( items.Count>1 && db < 10 ) // 10db elem kerül bele

{

int index = r.Random(0, items.Count-1);

int actual = items[index];


b.Items.Add( actual.ToString() );


items.RemoveAt(index);

db++;

}



b.Name = "combo" + i.ToString(); nem árt elnevezni hogy ha véletlen egyszer kellene majd vmiért :D


És ugye a SelectedIndexChanged-et is megkell adnod neki: b.SelectedIndexChanged += ...

comboBoxok.Add(b);

this.Controls.Add(b);

}


Ha meg törölni akarod akkor pl: this.controls.remove( comboBoxok[0] ); comboBoxok.removeat(0);

2011. szept. 2. 21:08
Hasznos számodra ez a válasz?

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!