2014-12-04 56 views
1

我有一个问题,以显示随机几个网格在Windows手机。 我创建了自己的代码,它工作正常,但并不简单。也许有一种更简单的方法来在Windows Phone中显示随机网格。显示随机网格c#

这是我需要我的应用程序:

我想点击一个按钮,显示一个随机的网格。当我再次点击时,它应该显示另一个网格并隐藏以前的网格。它现在应该显示任何网格两次。

这是我自己的代码:

List<int> number = new List<int> { 1,2,3,4,5 }; //create list 
private void Button_Click_2(object sender, RoutedEventArgs e) 
{ 
    int numberrandom; 
    Random bsd = new Random(); 
    if (number.Count > 0) // get random number from (numberlist) without repetition 
    { 
     int fIndex = bsd.Next(0, number.Count); 

     numberrandom = number[fIndex]; 
     txtbox1.Text = numberrandom.ToString(); // show random number at txtbox 
     number.RemoveAt(fIndex);    
    } 
    else 
    { 
     messagebox.show("no more grid show"); 
    } 

    int a = Convert.ToInt32(txtbox1.Text); // convert number txtbox from string to int 
    int val = a; 
    switch (val) 
    { 
     case 1: //show grid 1 
      grid1.Visibility = Visibility.Visible; 
      grid2.Visibility = Visibility.Collapsed; 
      grid3.Visibility = Visibility.Collapsed; 
      grid4.Visibility = Visibility.Collapsed; 
      grid5.Visibility = Visibility.Collapsed; 
     break; 
     case 2: //show grid 2 
      grid1.Visibility = Visibility.Collapsed; 
      grid2.Visibility = Visibility.Visible; 
      grid3.Visibility = Visibility.Collapsed; 
      grid4.Visibility = Visibility.Collapsed; 
      grid5.Visibility = Visibility.Collapsed; 
      break; 
     case 3: //show grid 3 
      grid1.Visibility = Visibility.Collapsed; 
      grid2.Visibility = Visibility.Collapsed; 
      grid3.Visibility = Visibility.Visible; 
      grid4.Visibility = Visibility.Collapsed; 
      grid5.Visibility = Visibility.Collapsed; 
     break; 
     case 4: //show grid 4 
      grid1.Visibility = Visibility.Collapsed; 
      grid2.Visibility = Visibility.Collapsed; 
      grid3.Visibility = Visibility.Collapsed; 
      grid4.Visibility = Visibility.Visible; 
      grid5.Visibility = Visibility.Collapsed; 
     break; 
     case 5: //show grid 5 
      grid1.Visibility = Visibility.Collapsed; 
      grid2.Visibility = Visibility.Collapsed; 
      grid3.Visibility = Visibility.Collapsed; 
      grid4.Visibility = Visibility.Collapsed; 
      grid5.Visibility = Visibility.Visible; 
     break; 
    } 
+1

所以这段代码有效,但你想简化它吗? – 2014-12-04 14:25:20

回答

1

有一对夫妇的改进可以使:

List<Grid> grids = new List<Grid> { grid1, grid2, grid3, gridN ... }; 
int gridIndex = 0; 

void Load() { 
    grids.Shuffle(); // use the extension method linked below 
} 

void Button_Click_2(object sender, RoutedEventArgs e) { 
    if (gridIndex >= grids.Count) 
     return; 

    if (gridIndex > 0) { 
     grids[gridIndex - 1].Visibility = Visibility.Collapsed; 
    } 
    grids[gridIndex].Visibility = Visibility.Visible; 
    gridIndex++; 
} 

你需要显示原电网号码?如果没有,上面的代码更简单。这里是Shuffle()扩展方法,我从this answer得到它:

public static void Shuffle<T>(this IList<T> list) 
{ 
    Random rng = new Random(); 
    int n = list.Count; 
    while (n > 1) { 
     n--; 
     int k = rng.Next(n + 1); 
     T value = list[k]; 
     list[k] = list[n]; 
     list[n] = value; 
    } 
} 
+0

我不期望使用列表。这非常有帮助。谢谢Zachary:D – 2014-12-05 08:04:40

1

我想你想要做的仅仅是随机排序的整数列表,然后再开始一次。

List<int> lNumbers = New List<int> {1,2,3,4,5}; 
var rnd = New Random(); 
lNumbers = lNumbers.OrderBy(ob => rnd.Next()).ToList(); 

然后只保留一个索引计数器变量,并在每次单击按钮时在列表中显示下一个变量。

虽然我不太熟悉Winodws Phone,但我会认为你可以使用FindControl来获得正确的gridview控件隐藏,以及正确的取消隐藏。

希望这会有所帮助。

:)大卫

PS - 我不喜欢亚特先生的答案的唯一事情是:

foreach(var grid in grids) { 
    grid.Visibility = Visibility.Collapsed; 
} 
grids[gridIndex].Visibility = Visibility.Visible; 

你并不需要所有网格能见度设置为Collpased。只有最后一个:

if (gridIndex > 0) { 
    grids[gridIndex - 1].Visibility = Visibility.Collapsed; 
} 
grids[gridIndex].Visibility = Visibility.Visible; 
+0

谢谢大卫它的作品:) – 2014-12-05 08:02:38

+0

良好的通话,我同意 – 2014-12-05 14:43:52

1

您的代码确实可以简化。举例来说,你可以把你所有的网格在它的列表和循环设置可视性:

List<int> number = new List<int> { 0, 1, 2, 3, 4 }; //create list 
private void Button_Click_2(object sender, RoutedEventArgs e) 
{ 
    int numberrandom; 
    Random bsd = new Random(); 

    if (number.Count > 0) // get random number from (numberlist) without repetition 
    { 
     int fIndex = bsd.Next(0, number.Count); 

     numberrandom = number[fIndex]; 
     txtbox1.Text = (numberrandom + 1).ToString(); // show random number at txtbox 
     number.RemoveAt(fIndex); 
    } 
    else 
    { 
     MessageBox.Show("no more grid show"); 
    } 

    var grids = new List<Grid> { grid1, grid2, grid3, grid4, grid5 }; 

    for (int i = 0; i < grids.Count; i++) 
    { 
     grids[i].Visibility = i == numberrandom ? Visibility.Visible : Visibility.Collapsed; 
    } 
}