从另一种方法引用/使用数组..?

时间:2015-04-27 19:49:36

标签: c# arrays visual-studio methods void

我需要能够在我的按钮中使用randomNumbers []数组单击void但是如果我在我的按钮中输入void randomNumbers()中的内容,则单击void,每次我单击按钮时它都会使原来的随机订单生成。这不是我想要的。有没有什么方法可以调用/引用/使用/从其自己的void导入randomNumbers到按钮单击void。

背景知识:

我的总体目标最初填充了一个数组,其中包含0到90之间的90个数字,并且没有重复项,并且在按钮单击时显示在文本框中。经过几天尝试不同的方式,我使用这个和它最接近我来,因为没有重复。当按钮中的randomNumbers []单击无效时,富文本框将显示完全相同的数字,每次单击按钮时,它都会一次显示所有数字,因此我创建了另外两个显示的文本框数字一个接一个,但每次单击按钮时都会发生重复,randomNumbers []会以不同的顺序重新生成。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }


    void randomNumbers()
    {
        Random rnd = new Random();
        var randomNumbers = Enumerable.Range(1, 90).OrderBy(i => rnd.Next()).ToArray();

    }

    string space = " ";
    int number;

   void button1_Click(object sender, EventArgs e)
    {

        int[] array = randomNumbers;
        for (int i = 0; i < 90; i++)
        {
            richTextBox1.Text += randomNumbers[i].ToString() + space;
            richTextBox2.Text += array[i].ToString() + space;
            number = array[i];

        }

        textBox1.Text += number.ToString() + space;
        textBox2.Text += textBox1.Text;
        textBox1.Clear();

    }

    }
}

3 个答案:

答案 0 :(得分:1)

您的问题源于您的数组是void randomNumbers()方法的本地数据。

解决方案非常简单;将randomNumbers移动为class宽变量,或者(更优雅的解决方案)将randomNumbers的返回类型更改为int[]数组。即:

选项A:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        int[] GenerateRandomNumbers()
        {
            Random rnd = new Random();
            return Enumerable.Range(1, 90).OrderBy(i => rnd.Next()).ToArray();
        }

        string space = " ";
        int number;

        void button1_Click(object sender, EventArgs e)
        {
            int[] array = GenerateRandomNumbers();
            for (int i = 0; i < 90; i++)
            {
                richTextBox1.Text += randomNumbers[i].ToString() + space;
                richTextBox2.Text += array[i].ToString() + space;
                number = array[i];
            }

            textBox1.Text += number.ToString() + space;
            textBox2.Text += textBox1.Text;
            textBox1.Clear();
        }
    }
}

或者,如果您需要保留列表class - 广泛或不更改一旦实例化,您应该将其设为class的变量-scoped:

选项B:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml.Linq;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        int[] randomNumbers;

        public Form1()
        {
            InitializeComponent();
            randomNumbers = GenerateRandomNumbers();
        }

        int[] GenerateRandomNumbers()
        {
            Random rnd = new Random();
            return Enumerable.Range(1, 90).OrderBy(i => rnd.Next()).ToArray();
        }

        string space = " ";
        int number;

        void button1_Click(object sender, EventArgs e)
        {
            int[] array = randomNumbers;
            for (int i = 0; i < 90; i++)
            {
                richTextBox1.Text += randomNumbers[i].ToString() + space;
                richTextBox2.Text += array[i].ToString() + space;
                number = array[i];
            }

            textBox1.Text += number.ToString() + space;
            textBox2.Text += textBox1.Text;
            textBox1.Clear();
        }
    }
}

没有测试它,但它应该适合你。

编辑:刚试过它,据我所知可以正常工作。

答案 1 :(得分:0)

namespace WindowsFormsApplication1
    {
      public class generate
        {
    public static int[] randomNumbers()
    {
        Random rnd = new Random();
        var randomNumbers = Enumerable.Range(1, 90).OrderBy(i => rnd.Next()).ToArray();
        return randomNumbers;

    }
}
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

    }




    string space = " ";
    int number;

    void button1_Click(object sender, EventArgs e)
    {

        int[] array = generate.randomNumbers();
        for (int i = 0; i < 90; i++)
        {
            richTextBox1.Text += randomNumbers[i].ToString() + space;
            richTextBox2.Text += array[i].ToString() + space;
            number = array[i];

        }

        textBox1.Text += number.ToString() + space;
        textBox2.Text += textBox1.Text;
        textBox1.Clear();

    }

}
  }

试试这个。

答案 2 :(得分:-1)

试试这个

public partial class Form1 : Form
{
   private int[] array;
   private int mouseClickCount=0;

    public Form1()
    {
        InitializeComponent();
        GenerateRandomNumbers();
    }


    void GenerateRandomNumbers()
    {
        Random rnd = new Random();
        array = Enumerable.Range(1, 90).OrderBy(i => rnd.Next()).ToArray();
    }


   void button1_Click(object sender, EventArgs e)
    {
       if(mouseClickCount == 90)
       {
          mouseClickCount =0;
          richTextBox1.Clear();
       } 
        mouseClickCount++;
        richTextBox1.Text+=randomNumbers[mouseClickCount]+ " ";    
    }
}