2015-02-14 2 views
-1

Я пытаюсь получить случайные числа в Content моего Buttons, но я получаю одно значение в каждом методе. Это не дубликат random-number-generator-only-generating-one-random-number, потому что в моем коде я вызываю GenerateRandomNumber в конструкторе моего класса MainPage. Это мой код-Случайное число в содержимом кнопки

public sealed partial class MainPage : Page 
     { 
      public MainPage() 
      { 
       this.InitializeComponent(); 
       this.RandomNumber = GenerateRandomNumber(50, 350); 
       this.DataContext = this; 
       this.NavigationCacheMode = NavigationCacheMode.Required; 
      } 
      public int RandomNumber { get; set; } 
      public int GenerateRandomNumber(int min, int max) 
      { 
       Random random = new Random(); 
       return random.Next(min,max); 
      } 

     private void ButtonNo3(object sender, RoutedEventArgs e) 
     { 
      int ans = 0; 
      Button obj = (Button)sender; 
      var selectedButton = obj.Content.ToString(); 
      //some more code 
     } 
     private void ButtonNo4(object sender, RoutedEventArgs e) 
     { 
      int ans = 0; 
      Button obj = (Button)sender; 
      var selectedButton = obj.Content.ToString(); 
      //some more code 
     } 

Это часть моего XAML кода, в котором моя кнопка должна иметь случайное число в его контент-

  <Button 
      x:Name="Button3" 
      Content="{Binding Path=RandomNumber}"       
      Click="ButtonNo3" 
      HorizontalAlignment="Left" 
      Margin="0,118,0,0" 
      VerticalAlignment="Top" 
      Height="37" 
      Width="47"/> 

      <Button 
      x:Name="Button4" 
      Content="{Binding Path=RandomNumber}"       
      Click="ButtonNo4" 
      HorizontalAlignment="Left" 
      Margin="0,118,0,0" 
      VerticalAlignment="Top" 
      Height="37" 
      Width="47"/> 

У меня есть много кнопок, как на двух, показанных на код выше. Я хочу, чтобы все они имели различное случайное число как Content еще до щелчка по нему (поэтому я не могу вызвать функцию GenerateRandomNumber в методе private void Button3(), потому что это могло бы генерировать числа randoms при нажатии. Но я хочу, чтобы разные случайные числа раз один раз для каждого перед нажатием кнопки. Как я могу это сделать?

ответ

-1

Вам необходимо определить случайный экземпляр вне вашего метода.

Random random = new Random(); 
public int GenerateRandomNumber(int min, int max) 
{ 
    return random.Next(min,max); 
} 

См. this Вопрос о том, почему. В принципе, при вызове в быстрой последовательности каждый экземпляр random будет снабжен одним и тем же семенем, что приведет к генерированию одинаковых значений. Использование более постоянного случайного экземпляра будет продолжать генерировать новые значения, поскольку внутреннее состояние будет правильно установлено после каждого вызова Next.

+0

Все еще мои кнопки получают одинаковые случайные значения. – Coder

0

Я согласен, это не то же самое, что и проблема random-number-generator-only-generating-one-random-number, которая появляется так часто.

В этом случае это потому, что вы звоните GenerateRandomNumber только один раз.

this.RandomNumber = GenerateRandomNumber(50, 350); 

Связывание затем приходит из этого Собственость:

Content="{Binding Path=RandomNumber}"  

Таким образом, обе кнопки имеют то же случайное число.

Будьте осторожны: если вы в конечном итоге вызываете GenerateRandomNumber дважды, вы будете страдать от проблемы «быстрой последовательности», поэтому поставьте экземпляр класса Random вне метода.

Смежные вопросы