如何在标签中随机滚动数字列表(数字列表在记事本中)

时间:2018-03-09 00:48:20

标签: c# asp.net

我想从记事本中检索数据并在标签上随机显示。该项目是关于幸运抽奖系统,我需要随机显示员工ID。

以下是我的代码:

protected void Button1_Click(object sender, EventArgs e)
{
    try
    {
        // Create an instance of StreamReader to read from a file.
        // The using statement also closes the StreamReader.
        using (StreamReader sr = new StreamReader("C:/ Users / Nor Asyraf Mohd No / Documents / TestFile.txt"))
        {
            string line;
            // Read and display lines from the file until the end of 
            // the file is reached.
            while ((line = sr.ReadLine()) != null)
            {
                string strRead = sr.ReadLine();
                Random random = new Random();
                Label1.Text = strRead.ToString();
            }
        }
    }
    catch (Exception i)
    {
        // Let the user know what went wrong.
        Console.WriteLine("The file could not be read:");
        Console.WriteLine(i.Message);
    }
}

1 个答案:

答案 0 :(得分:0)

您的代码存在一些问题。首先,您应该声明一次Random变量而不是循环内部。由于Random使用系统时间作为种子,如果它在一个快速运行的循环内初始化,则每次迭代可能会得到相同的“随机”数。我通常只是将它声明为类字段,因此它也可以被其他方法使用。

同样,您可以将文件路径存储为类级别变量,而不是每次调用方法时。如果文件内容没有改变,你应该考虑在启动时将它们保存在List<string>类字段中一次,而不是每次都读取文件。但我会假设文件内容可能会发生变化,因此我会将该代码留在方法中。

接下来,您可以使用File.ReadAllLines一次获取文件的所有行,然后您可以在生成的文件行字符串数组中访问随机索引。

为了确保您不会多次显示同一项目,您可以将文件行读入List<string>一次,然后在从该列表中选择随机项后删除它它不会再次使用。

例如:

private Random random = new Random();
private string testFilePath = @"c:\users\nor asyraf mohd no\documents\testfile.txt";
private List<string> testFileLines;

private void Form1_Load(object sender, EventArgs e)
{
    if (!File.Exists(testFilePath))
    {
        MessageBox.Show($"The file does not exist: {testFilePath}");
    }
    else
    {
        try
        {
            testFileLines = File.ReadAllLines(testFilePath).ToList();
        }
        catch (Exception ex)
        {
            MessageBox.Show($"Could not read file {testFilePath}. Exception details: {ex}");
        }
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    if (testFileLines != null && testFileLines.Count > 0)
    {
        var randomLine = testFileLines[random.Next(testFileLines.Count)];
        Label1.Text = randomLine;
        testFileLines.Remove(randomLine);
    }
}