2013-05-11 2 views
0

데이터베이스의 데이터를 4 개의 레이블에 채워야하는 응용 프로그램이 있는데이 레이블을 x : 79, 199, 437, 319의 무작위 위치에 표시하려고합니다.레이블 무작위 포인트

Random 클래스를 사용하려고했지만 가끔씩 같은 위치를 반환합니다. 누구든지이 해결책을 제공해 주시겠습니까? answer1 - 아래 4 번 답변을 선택하면 응용 프로그램이 실행될 때마다 위치가 뒤섞 일 수 있습니다.

answer1.Location = new Point(79, 60); 
answer2.Location = new Point(199, 60); 
answer4.Location = new Point(437, 60); 
answer3.Location = new Point(319, 60); 
+1

나 ' 레이블의 위치를 ​​동일하게 유지하고 협회/셔플 만 섞는다. aning. – CodesInChaos

+0

영리한 사용자는 Spy ++와 같은 창 순서를 보여주는 유틸리티에서 언제나 대답을 볼 수 있습니다. –

답변

0

내가 사용하는 것은 잘못되었습니다.

Random class의 올바른 사용법은 다음과 같습니다

var yourrand = Random.Next(437 /*The maximum*/); 
:와 randome 번호를 얻기 위해 "randome"기능에 액세스보다

  1. 클래스를

    Random rnd1 = new Random(); 
    
  2. 를 인스턴스화

Next function

2

당신은 List<Point>에 포인트를 넣을 수 있습니다 :

var list = new List<Point> 
    { 
     new Point(79, 60), 
     new Point(199, 60), 
     new Point(319, 60), 
     new Point(437, 60) 
    }; 

을 그런 다음 Fisher-Yates algorithm

var rand = new Random(); 
var n = list.Count - 1; 
for(var n = list.Count; n > 0; n--) 
{ 
    int k = rng.Next(n - 1); 
    var value = list[k]; 
    list[k] = list[n]; 
    list[n] = value; 
} 

으로 셔플 그리고 당신은 사용

answer1.Location = list[0]; 
answer2.Location = list[1]; 
answer3.Location = list[2]; 
answer4.Location = list[3]; 
+0

고맙습니다, 잘 작동합니다 :) – avi

+0

@avi (이 답변은 +1이지만 ...) 또한 서로를 너무 가깝게 만들면 새로운'Random() '을 생성해서는 안됩니다. 시간에 따라 동일한 숫자가 생성됩니다 (상대적으로 느리게 변경되는 타임 스탬프를 시드로 사용하기 때문에). Form 클래스에서'Random'을 한 번 만들어 셔플마다 다시 사용해야합니다. –