Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
显示随机网格c#_C#_Windows Phone - Fatal编程技术网

显示随机网格c#

显示随机网格c#,c#,windows-phone,C#,Windows Phone,我在windows phone中随机显示一些网格时遇到问题。 我创建了自己的代码,它运行良好,但并不简单。也许有一种更简单的方法可以在windows phone中显示随机网格 这就是我的应用程序所需的: 我想单击按钮以显示随机网格。当我再次单击时,它将显示另一个网格并隐藏上一个网格。它现在应该显示任意网格两次。 这是我自己的代码: List<int> number = new List<int> { 1,2,3,4,5 }; //create list private v

我在windows phone中随机显示一些网格时遇到问题。 我创建了自己的代码,它运行良好,但并不简单。也许有一种更简单的方法可以在windows phone中显示随机网格

这就是我的应用程序所需的:

我想单击按钮以显示随机网格。当我再次单击时,它将显示另一个网格并隐藏上一个网格。它现在应该显示任意网格两次。

这是我自己的代码:

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;
    }
List number=新列表{1,2,3,4,5}//创建列表
私有无效按钮\u单击\u 2(对象发送方,路由目标)
{
整数域;
随机bsd=新随机();
if(number.Count>0)//不重复地从(numberlist)获取随机数
{
int fIndex=bsd.Next(0,number.Count);
numberrandom=数字[fIndex];
txtbox1.Text=numberrandom.ToString();//在txtbox处显示随机数
编号:RemoveAt(fIndex);
}
其他的
{
show(“不再显示网格”);
}
int a=Convert.ToInt32(txtbox1.Text);//将数字txtbox从字符串转换为int
int val=a;
开关(val)
{
案例1://显示网格1
grid1.Visibility=Visibility.Visible;
grid2.Visibility=可见性。已折叠;
grid3.Visibility=Visibility.Collapsed;
grid4.Visibility=Visibility.Collapsed;
grid5.可见性=可见性。折叠;
打破
案例2://显示网格2
grid1.Visibility=Visibility.Collapsed;
grid2.Visibility=Visibility.Visible;
grid3.Visibility=Visibility.Collapsed;
grid4.Visibility=Visibility.Collapsed;
grid5.可见性=可见性。折叠;
打破
案例3://显示网格3
grid1.Visibility=Visibility.Collapsed;
grid2.Visibility=可见性。已折叠;
grid3.Visibility=Visibility.Visible;
grid4.Visibility=Visibility.Collapsed;
grid5.可见性=可见性。折叠;
打破
案例4://显示网格4
grid1.Visibility=Visibility.Collapsed;
grid2.Visibility=可见性。已折叠;
grid3.Visibility=Visibility.Collapsed;
grid4.Visibility=Visibility.Visible;
grid5.可见性=可见性。折叠;
打破
案例5://显示网格5
grid1.Visibility=Visibility.Collapsed;
grid2.Visibility=可见性。已折叠;
grid3.Visibility=Visibility.Collapsed;
grid4.Visibility=Visibility.Collapsed;
grid5.Visibility=Visibility.Visible;
打破
}

我认为您要做的只是在开始之前对整数列表随机排序一次

List<int> lNumbers = New List<int> {1,2,3,4,5};
var rnd = New Random();
lNumbers = lNumbers.OrderBy(ob => rnd.Next()).ToList();
不需要将所有栅格可见性设置为Collpased。只需最后一个:

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

您的代码确实可以简化。例如,您可以将所有网格放在一个列表中,并在其上循环以设置可见性:

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;
    }
}
List number=新列表{0,1,2,3,4};//创建列表
私有无效按钮\u单击\u 2(对象发送方,路由目标)
{
整数域;
随机bsd=新随机();
if(number.Count>0)//不重复地从(numberlist)获取随机数
{
int fIndex=bsd.Next(0,number.Count);
numberrandom=数字[fIndex];
txtbox1.Text=(numberrandom+1).ToString();//在txtbox处显示随机数
编号:RemoveAt(fIndex);
}
其他的
{ 
Show(“不再显示网格”);
}
var grids=新列表{grid1,grid2,grid3,grid4,grid5};
对于(int i=0;i
您可以做一些改进:

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++;
}
List grids=新列表{grid1,grid2,grid3,gridN…};
int gridIndex=0;
空荷载(){
grids.Shuffle();//使用下面链接的扩展方法
}
无效按钮\u单击\u 2(对象发送器,路由目标){
如果(gridIndex>=grids.Count)
返回;
如果(gridIndex>0){
网格[gridIndex-1]。可见性=可见性。已折叠;
}
网格[gridIndex]。可见性=可见性。可见;
gridIndex++;
}
是否需要显示原始网格编号?如果不需要,则上面的代码要简单得多。这是Shuffle()扩展方法,我从以下位置获得:

publicstaticvoidshuffle(此IList列表)
{  
随机rng=新随机();
int n=list.Count;
而(n>1){
n--;
int k=下一个(n+1);
T值=列表[k];
列表[k]=列表[n];
列表[n]=值;
}  
}

所以这段代码很有效,但你们想简化它吗?哇,我不希望使用列表。这很有帮助。谢谢Zachary:D
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++;
}
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;  
    }  
}