首页 > 解决方案 > 如何遍历 numericupdown 的多个元素

问题描述

我是 C# 新手,我有几个 numericupdown 元素,我想在循环中使用这是我所做的,我还尝试了其他一些东西,例如 foreach。

private void AffecteValeurBinaire(int valeur)
        {
            nudBinaire3.Value = valeur % 2;
            valeur >>= 1;
            nudBinaire2.Value = valeur % 2;
            valeur >>= 1;
            nudBinaire1.Value = valeur % 2;
            valeur >>= 1;
            nudBinaire0.Value = valeur % 2;
        }

我想把上面的代码变成一个循环,这就是我上面所做的

private NumericUpDown[] nudBinaire = new NumericUpDown[] {nudBinaire3,nudBinaire2,nudBinaire1,nudBinaire0 };
        private void AffecteValeurBinaire(int valeur)
        {
            for (int i = 3; i >= 0; i++)
            {
                nudBinaire[i].Value = valeur % 2;
                valeur >>= 1;
            }

        }
   

private void nudDecimal_ValueChanged(object sender, EventArgs e)
    {
        if (radDecimal.Checked)
        {
            nudHexadecimal.Value = nudDecimal.Value;
            AffecteValeurBinaire(Convert.ToInt32(nudDecimal.Value));
            Affiche7Segments(Convert.ToInt32(nudDecimal.Value));
        }

    }
    private void nudBinaire_ValueChanged(object sender, EventArgs e)
    {
        if (radBinaire.Checked)
        {
            decimal v = (nudBinaire0.Value * 8) + (nudBinaire1.Value * 4) +
            (nudBinaire2.Value * 2) + (nudBinaire3.Value);
            nudDecimal.Value = v;
            nudHexadecimal.Value = v;
            Affiche7Segments(Convert.ToInt32(nudDecimal.Value));
        }

    }
    private void nudHexadecimal_ValueChanged(object sender, EventArgs e)
    {
        if (radHexadecimal.Checked)
        {
            nudDecimal.Value = nudHexadecimal.Value;
            AffecteValeurBinaire(Convert.ToInt32(nudHexadecimal.Value));
            Affiche7Segments(Convert.ToInt32(nudDecimal.Value));
        }
    }
    
    private void radDecimal_CheckedChanged(object sender, EventArgs e)
    {
        if (radDecimal.Checked == true)
        {
            nudDecimal.Enabled = true;
        }
    }
    private void radBinaire_CheckedChanged(object sender, EventArgs e)
    {
           nudBinaire0.Enabled = nudBinaire1.Enabled = nudBinaire2.Enabled = nudBinaire3.Enabled = radBinaire.Checked;
    }

    private void radHexadecimal_CheckedChanged(object sender, EventArgs e)
    {
        nudHexadecimal.Enabled = radHexadecimal.Checked;
    }

** 我收到此错误:字段初始化程序无法引用该字段**

标签: c#.netvisual-studiowinforms

解决方案


您可以尝试声明nudBinaire为全局变量,但在方法中初始化它(如Form1_Load)。

// declare as a global variable
NumericUpDown[] nudBinaire;

private void Form1_Load(object sender, EventArgs e)
{
    // initialize nudBinaire
    nudBinaire = new NumericUpDown[] { nudBinaire3, nudBinaire2, nudBinaire1, nudBinaire0 };
}

private void AffecteValeurBinaire(int valeur)
{
    for (int i = 3; i >= 0; i--)
    {
        nudBinaire[i].Value = valeur % 2;
        valeur >>= 1;
    }

}

private void button1_Click(object sender, EventArgs e)
{  
    // test
    AffecteValeurBinaire(100);
}

推荐阅读