Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#在Windows窗体应用程序的多个函数中使用变量_C#_Visual Studio_Function_Variables_Radio Button - Fatal编程技术网

C#在Windows窗体应用程序的多个函数中使用变量

C#在Windows窗体应用程序的多个函数中使用变量,c#,visual-studio,function,variables,radio-button,C#,Visual Studio,Function,Variables,Radio Button,我想在VisualStudio的多个函数中使用一个变量。我正在尝试获取值\u 1以用于显示为私有无效按钮1\u单击的标签 如果我这样尝试,我会收到以下错误消息: 'Black1\u CheckedChanged'匹配代理“EventHandler” 我错过了什么? 我真的很感激你的帮助。多谢各位 public partial class Form1 : Form { int value_1 = 20; int value_2 = 20; int value_3 = 20;

我想在VisualStudio的多个函数中使用一个变量。我正在尝试获取值\u 1以用于显示为私有无效按钮1\u单击的标签

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

'Black1\u 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);
    }
}

Black1.CheckedChanged
需要一个特定签名的方法(带有参数
object
EventArgs
)。
Black1\u 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;
    }
}

(对象发送方,事件参数e,int值_1)
应该是
(对象发送方,事件参数e)
。此外,您没有将
value_1
的值指定给按钮的文本。请注意,事件处理程序实际上是一种契约,它们接受某些参数,您不能只更改参数。把它想象成一把锁和一把钥匙,如果它们不匹配,它们就不起作用。在类作用域中声明
int
s(在
公共部分类Form1:Form
下)。然后您可以在该类中的任何位置访问它们的值。不要触摸事件处理程序声明。它们将不再匹配委托表单。@Jimi OP已经匹配了。@john HA。你说得对。这个压痕愚弄了我。它们似乎是沿着InitializeComponent()声明的;