C#在Windows窗体应用程序的多个函数中使用变量
我想在VisualStudio的多个函数中使用一个变量。我正在尝试获取值\u 1以用于显示为私有无效按钮1\u单击的标签 如果我这样尝试,我会收到以下错误消息: 'Black1\u CheckedChanged'匹配代理“EventHandler” 我错过了什么? 我真的很感激你的帮助。多谢各位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;
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()声明的;