Avatar billede roz Nybegynder
01. juni 2005 - 15:05 Der er 9 kommentarer og
1 løsning

Randomize 5 ComboBoxe

Hvordan kan jeg gøre dette (med så lidt kode som muligt):
Randomize den valgte item i hver af 5 comboboxe. Alle comboxene indeholder de samme 8 items og ingen af boxene må have den samme valgte item som nogen af de andre.

Jge behøver ikke selve koden blot et forslag til hvordan dette kan gøres på en let måde :)
Avatar billede kroning Nybegynder
01. juni 2005 - 15:18 #1
Hvad hedder dine comboboxe? ComboBox1, ComboBox2 osv. eller ?
Avatar billede nop Nybegynder
01. juni 2005 - 15:20 #2
for i=1 to 5 do begin
igen:
  x:=rnd(8)
  for j=1 to i-1 do
    if combo(i).itemSelected=x then goto igen
  combox(i).itemSelected=x
end
Avatar billede kroning Nybegynder
01. juni 2005 - 15:57 #3
procedure GoRando(Boxe: Array of TComboBox);
var
  Used,i,x : integer;
begin
  Randomize;
  Used:=$FFFF;
  for i:=0 to 4 do
  begin
    repeat
      x:=random(8)+1;
    until (Used and (x shl x)) =(x shl x);
    Boxe[i].ItemIndex:=x-1;
    Used:=Used-(x shl x);
  end;
end;

----------
Hvis f.eks. dine boxe hedder ComboBox1, ComboBox2 osv. kaldes den sådan:

GoRando([ComboBox1,ComboBox2,ComboBox3,ComboBox4,ComboBox5]);
Avatar billede roz Nybegynder
01. juni 2005 - 16:08 #4
Okay mange tak Kroning :) Det virker perfekt.
Du får selvfølgeligt pointene hvis du blot lægger et svar. Men har lige et spørgsmål til nu vi er ved emnet:
Hvordan kan jeg (når man vælger en item i en combobox) tjekke om denne item er valgt i en af de andre 5 boxe. Og hvis den er så skal den automatisk vælge item'en under den valgte medmindre den selvfølgeligt også er valgt i en af de andre.
Håber du forstår og gider hjælpe :)
Avatar billede roz Nybegynder
01. juni 2005 - 16:13 #5
Har også et andet problem med din kode kroning: Hver ENESTE gang der bliver randomized bliver item 1, 3 og 8 valgt. Alle de andre er vist ret tilfældige med ikke lige de 3 :S
Avatar billede kroning Nybegynder
01. juni 2005 - 16:56 #6
Ang. 1,3 og 8 så er der en fejl i proceduren men den er nu heller ikke særlig god, denne er bedre da der ikke er en teoretisk meget lang repeat until lykke i den:

procedure GoRando(Boxe: Array of TComboBox);
var
  i,c,x : integer;
  Used : array[0..7] of byte;
begin
  Randomize;
  for i:=0 to 7 do
    Used[i]:=i;
  c:=8;
  for i:=0 to 4 do
  begin
    x:=random(c);
    Boxe[i].ItemIndex:=Used[x];
    Used[x]:=Used[c-1];
    dec(c);
  end;
end;
Avatar billede kroning Nybegynder
01. juni 2005 - 16:59 #7
Jeg forstår ikke helt dit spørgsmål: 16:08:56
Avatar billede roz Nybegynder
01. juni 2005 - 17:08 #8
Super :) Denne virker korrekt :)

Hmm har en anden ide så: Når man trykker på en knap skal denne tjekke om 2 eller flere comboboxe (ud af mine 5 boxe) har den samme item valgt og hvis de har udføre noget kode.
Avatar billede kroning Nybegynder
01. juni 2005 - 17:20 #9
Det burde kunne gøren sådan:

function FlereEns(Boxe: Array of TComboBox) : boolean;
var
  i,x : integer;
begin
  Result:=true;
  for i:=0 to 3 do
    for x:=i+1 to 4 do
      if Boxe[i].ItemIndex=Boxe[x].ItemIndex then
        exit;
  Result:=false;
end;

-----
  if FlereEns([ComboBox1,ComboBox2,ComboBox3,ComboBox4,ComboBox5]) then
    showmessage('jep der foretaget samme valg');
Avatar billede roz Nybegynder
01. juni 2005 - 17:32 #10
Super duper :) Tak skal du ha' :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester