加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 标签文本值未设置

发布时间:2020-12-16 00:08:52 所属栏目:百科 来源:网络整理
导读:我有8个标签.我希望每个标签的text属性设置为随机数.由于某种原因,只有第一个标签有一个数字集,为什么会这样? (另外,虽然没有直接相关,如果有更好的方法做label1.Text,label2.Text,label3.Text等,请告诉我!) 谢谢 public partial class Form1 : Form{ publ
我有8个标签.我希望每个标签的text属性设置为随机数.由于某种原因,只有第一个标签有一个数字集,为什么会这样? (另外,虽然没有直接相关,如果有更好的方法做label1.Text,label2.Text,label3.Text等,请告诉我!)

谢谢

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

    void go()
    {
        int[] numbers = new int[8];

        foreach (int number in numbers) 
        {
            numbers[number] = getRandomNumber();
        }

        label1.Text = numbers[0].ToString();
        label2.Text = numbers[1].ToString();
        label3.Text = numbers[2].ToString();
        label4.Text = numbers[3].ToString();
        label5.Text = numbers[4].ToString();
        label6.Text = numbers[5].ToString();
        label7.Text = numbers[6].ToString();
        label8.Text = numbers[7].ToString();
    }

    int getRandomNumber()
    {
        Random random = new Random();
        return random.Next(10,1000);
    }
}

解决方法

编辑:更多问题

only the first label is having a number set

这样做的原因是你以这种方式声明和初始化了一个int []:

int[] numbers = new int[8];

在此之后,您有一个长度为8的数组,但所有的int都是默认值(int),即0.

因此以下的foreach循环……

foreach (int number in numbers) 
{
    numbers[number] = getRandomNumber();
}

…只会将第一个int初始化为一个随机数(好吧,不是真正随机的,稍后会更多关于此).您可以使用for循环:

for (int iii=0; iii<numbers.Length;iii++)
{ 
    numbers[iii] = getRandomNumber();
}

但是,如果您使用我下面的改进代码,也将解决此问题.

在循环中使用相同的随机实例.否则它会创建相同的数字,因为它是以当前时间播种的.

MSDN

The random number generation starts from a seed value. If the same
seed is used repeatedly,the same series of numbers is generated. One
way to produce different sequences is to make the seed value
time-dependent,thereby producing a different series with each new
instance of Random. By default,the parameterless constructor of the
Random class uses the system clock to generate its seed value,while
its parameterized constructor can take an Int32 value based on the
number of ticks in the current time.

Random rnd = new Random();
foreach (int number in numbers) 
{
    numbers[number] = rnd.Next(10,1000);
}

根据您的第二个问题如何改进代码:您可以使用带有标签的数组:

Random random = new Random();
var labels = new[] { label1,label2,label3,label4,label5,label6,label7,label8 };
for (int i = 0; i < labels.Length; i++)
{
    labels[i].Text = random.Next(10,1000).ToString();
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读