您好我正在为我的作业写一些代码而且我被卡住了。我为数字按钮创建了一个常规单击事件处理程序:
private void btnN_Click(object sender, EventArgs e),
现在我需要制作频率数组,每当点击其中一个按钮时我需要更新。 这是freqArray:
private int[] freqArray = new int[10];
如果有九个按钮,我怎么能这样做? 谢谢
lastNum是按钮的数量。
private void btnN_Click(object sender, EventArgs e)
{
for (int i = 0; i < lastNum; i++)
{
freqArray[i]++;
lstFrequencies.Items[i] = i + "\t\t" + freqArray[i];
}
}
答案 0 :(得分:1)
你必须明白的一件事是你不应该要求解决问题。但是,因为你的问题需要它。
首先,您应该在按钮中添加标签以区分它们:
button1.Tag = "1";
button2.Tag = "2";
.
.
.
然后在您的事件处理程序中将sender对象强制转换为您的控件类型:
Button a = (button)sender;
然后检查按钮a的标签以添加频率:
freqArray[Convert.ToString(a.Tag)-48] = freqArray[Convert.ToString(a.Tag)-48] + 1;
答案 1 :(得分:1)
天哪,这已经失控了......但是由于最初的提示和帮助你的想法已经碰壁 - 我将讨论问题并将决定留给你..
核心问题是在公共点击事件中识别单击了多个按钮中的哪一个。关键是通常在事件的参数中;在这种情况下,sender
是点击的按钮。
我们会查看三种不同方式来识别发件人:
Control
Name
Tag
所以最简单和最直接的方法是这样的:
if (sender == button1) freqArray[0]++;
else if (sender == button2) freqArray[1]++;
..
请注意,当设计师将您添加的控件命名为1时,程序员从0开始计数! (正如C#中的许多数据结构一样,包括你的计数数组!)
还有其他方法,因为我们在这里做了一点教训:
发件人是最基本的类型object
;你可以将一个对象强制转换为它的实际类型:
Button b = (Button) sender;
现在您可以访问所有按钮的属性,包括名称。所以你可以像这样编写上面的代码:
if (b.Name == "button1") freqArray[0]++;
else if (b.Name == "button2") freqArray[1]++;
..
这已从标识中取消了实际的按钮控制,并将其替换为字符串。
还有一个名为Tag
的通用属性,它偶然也是类对象;您可以在其中存储任何。这使得它有时非常有价值,并且通常会创建一个特殊的结构甚至是类,只是为了在Tag中存储许多东西。
因此,如果您创建了按钮以使其标记包含索引,则可以使用:
freqArray[ (int) ( (Button) sender).Tag) ]++;
注意双重演员和所有这些括号!它看起来很复杂。它只是一行,而不是我们之前看到的if子句的长向量。但它只适用于您之前设置了标签,可能在加载事件中:
button1.Tag = 0;
button2.Tag = 1;
button3.Tag = 2;
...
所以你必须先投资然后才能收获......
在这里要消化很多..你的选择!