创建一个在类构造函数中不会更改的随机数

时间:2015-10-10 16:24:53

标签: c# class variables random constructor

我想在文本更改时在文本框中创建一个随机数。 我的问题是,当我更改文本字段时,随机数总是会改变。我只想创建一次变量。怎么做?

using System;
using System.Windows.Forms;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()                  // constructor of Form1
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            Rand m = new Rand();
            textBox1.Text = m.myRand.ToString();
        }
    }

    public class Rand
    {
        public int myRand = new Random().Next(10);
        public Rand() { }
    }
}

4 个答案:

答案 0 :(得分:2)

如果我正确理解了这个问题,你可以重构m成为Form1的一个字段:

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        Rand m = new Rand();            // m is generated only once
        public Form1()                  // constructor of Form1
        {
            InitializeComponent();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox1.Text = m.myRand.ToString();
        }
    }

    public class Rand
    {
        public int myRand = new Random().Next(10);
        public Rand() { }
    }
}

答案 1 :(得分:1)

在Form1中创建两个变量:

Rand number;
bool firstime = true;

和textBox1_TextChanged():

if(firstime)
{
   number = new Rand();
   textBox1.Text = number.myRand.ToString();
   firstime = false;
}

答案 2 :(得分:1)

您可以让您的类静态并使用静态myRand变量。

public static class Rand
{
    public static int myRand;
    static Rand() {
        myRand = new Random().Next(10);
    }
}

现在您甚至不需要创建新类。只做textBox1.Text = Rand.myRand; myRand将在对象的生命周期中初始化一次。

答案 3 :(得分:1)

在语句后面添加代码:InitializeComponent();这是表单的构造函数。在全局空间中声明变量,而不是在函数内部。

using System.Windows.Forms;

namespace WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        Rand m = new Rand();
        public Form1()                  // constructor of Form1
        {
            InitializeComponent();
            textBox1.Text = m.myRand.ToString();
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
        }
    }

    public class Rand
    {
        public int myRand = new Random().Next(10);
        public Rand() { }
    }
}​