首页 > 解决方案 > C# 在 Windows 窗体应用程序的多个函数中使用变量

问题描述

我想在 Visual Studio 的多个函数中使用一个变量。我试图让 value_1 用于显示为 private void button1_Click的标签。

如果我以这种方式尝试,我会收到以下错误消息:

'Black1_CheckedChanged' 匹配委托 'EventHandler'

我错过了什么?我非常感谢您的帮助。谢谢你。

public partial class Form1 : Form
{
    int value_1 = 20;
    int value_2 = 20;
    int value_3 = 20;

    public Form1()
    {
        InitializeComponent();
    }

    // Groupe Colour 1
    private void Black1_CheckedChanged(object sender, EventArgs e, int value_1)
    {

        colour1.BackColor = System.Drawing.Color.Black;
        groupBox1.BackColor = System.Drawing.Color.Black;

        value_1 = 0;
    }

    private void Brown1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Brown;
        groupBox1.BackColor = System.Drawing.Color.Brown;

        value_1 = 1;
    }

    private void Red1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Red;
        groupBox1.BackColor = System.Drawing.Color.Red;

        value_1 = 2;
    }

    private void Orange1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Orange;
        groupBox1.BackColor = System.Drawing.Color.Orange;

        value_1 = 3;
    }

    private void Yellow1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Yellow;
        groupBox1.BackColor = System.Drawing.Color.Yellow;

        value_1 = 4;
    }

    private void Green1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Green;
        groupBox1.BackColor = System.Drawing.Color.Green;

        value_1 = 5;
    }

    private void Blue1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Blue;
        groupBox1.BackColor = System.Drawing.Color.Blue;

        value_1 = 6;
    }

    private void Purple1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Purple;
        groupBox1.BackColor = System.Drawing.Color.Purple;

        value_1 = 7;
    }

    private void Grey1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Gray;
        groupBox1.BackColor = System.Drawing.Color.Gray;

        value_1 = 8;
    }

    private void White1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.White;
        groupBox1.BackColor = System.Drawing.Color.White;

        value_1 = 9;
    }

    private void button1_Click(object sender, EventArgs e)
    {
        value_1 = int.Parse(label_total.Text);
    }
}

标签: c#visual-studiofunctionvariablesradio-button

解决方案


Black1.CheckedChanged需要一个特定签名的方法(带有参数objectEventArgs)。函数的参数数量Black1_CheckedChanged已更改。如果参数多于两个参数,则对函数的调用将找不到第三个参数的值,int value_1并且会引发该错误。这就是抛出错误的原因。

要解决这个问题,您必须更改这部分代码:

private void Black1_CheckedChanged(object sender, EventArgs e, int value_1)
{
    colour1.BackColor = System.Drawing.Color.Black;
    groupBox1.BackColor = System.Drawing.Color.Black;

    value_1 = 0;
}

对此:

private void Black1_CheckedChanged(object sender, EventArgs e)
{
    colour1.BackColor = System.Drawing.Color.Black;
    groupBox1.BackColor = System.Drawing.Color.Black;

    value_1 = 0;
}

或者,正如您在此答案中看到的那样,您可以使用 lambda 表达式作为事件处理程序的适配器,并且可以使用当前函数而无需更改:

Black_1.CheckedChanged += new CheckedChanged((sender, e) => Black1_CheckedChanged(sender, e, value_1));

使用之前的解决方案,您的代码将如下所示:

public partial class Form1 : Form
{
    int value_1 = 20;
    int value_2 = 20;
    int value_3 = 20;

    public Form1()
    {
        InitializeComponent();
        Black_1.CheckedChanged += new CheckedChanged((sender, e) => Black1_CheckedChanged(sender, e, value_1));
    }

    ...

    private void Black1_CheckedChanged(object sender, EventArgs e, int value_1)
    {
        colour1.BackColor = System.Drawing.Color.Black;
        groupBox1.BackColor = System.Drawing.Color.Black;

        value_1 = 0;
    }
}

如果您需要以简单的方式传递新参数,您可以通过其他方式传递值,例如使用类范围内的其他变量(类属性)来存储您需要的值。

例如:

public partial class Form1 : Form
{
    int value_1 = 20;
    int value_2 = 20;
    int value_3 = 20;
    int temp = 0;

    public Form1()
    {
        InitializeComponent();
    }

    ...

    private void Black1_CheckedChanged(object sender, EventArgs e)
    {
        colour1.BackColor = System.Drawing.Color.Black;
        groupBox1.BackColor = System.Drawing.Color.Black;

        temp = 0;
    }
}

推荐阅读