c# - 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);
}
}
解决方案
Black1.CheckedChanged
需要一个特定签名的方法(带有参数object
和EventArgs
)。函数的参数数量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; } }
推荐阅读
- java - 如何确保 switch/case 语句具有使用枚举等所有选项?
- html - 为什么我的响应式网站在移动设备上放大了?
- scala - Scala类型不匹配的除法
- jenkins-pipeline - 詹金斯管道常规的奇怪行为
- snowflake-cloud-data-platform - CTAS COPY INTO 的输出
- react-native - renderRows如何获取最后一项的值
- python - 如何在 Python ftplib 中检查 FTP 登录是否成功?
- spring - @Value 在运行 webApp 时工作正常,但 maven 构建失败,无法解析占位符 'property.push.url' in value "${property.push.url}"
- c - void 指针 - 从闪存加载结构
- c# - 将SQL查询结果反序列化为动态对象c#