如何更新点击按钮的频率
本文关键字:按钮 频率 何更新 更新 | 更新日期: 2023-09-27 18:07:04
嗨,我正在为我的作业写一些代码,我卡住了。我为数字按钮创建了一个通用的单击事件处理程序:
private void btnN_Click(object sender, EventArgs e),
,现在我需要使频率数组,我需要更新,每次当一个按钮被点击。这里是freqArray:
private int[] freqArray = new int[10];
如果有9个按钮,我怎么做呢?谢谢你
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];
}
}
天哪,这有点失控了。但既然给你提示和帮助你的最初想法已经碰壁了——我将讨论这个问题,把决定留给你。
核心问题是在常见的单击事件中确定哪些按钮被单击了。关键通常在事件的参数中;在本例中,sender
是被点击的按钮。
我们将看看三种识别发送者的不同方式:
- 与
Control
比较 - 通过查看
Name
- 通过使用存储在
Tag
中的索引
所以最简单和最直接的方法是这样的:
if (sender == button1) freqArray[0]++;
else if (sender == button2) freqArray[1]++;
..
请注意,虽然设计人员使用从1开始的计数来命名您添加的控件,但程序员从0开始计数!(c#中的许多数据结构也一样,包括计数数组!)
还有其他的方法,因为我们在这里做了一个小教训,我们开始:
Sender是最基本的类型object
;您可以将对象强制转换为其实际类型,如下所示:
Button b = (Button) sender;
现在您可以访问按钮的所有属性,包括Name。所以你可以这样写上面的代码:
if (b.Name == "button1") freqArray[0]++;
else if (b.Name == "button2") freqArray[1]++;
..
这将实际的按钮控件从标识符中解耦,并将其替换为字符串。
还有一个通用的属性叫做Tag
,顺便说一下,它也是一个类对象;您可以在其中存储任何内容。这使得它有时非常有价值,并且经常创建一个特殊的结构甚至类只是为了在标签中存储许多东西。
如果你已经创建了按钮让它们的标签包含索引你可以使用:
freqArray[ (int) ( (Button) sender).Tag) ]++;
注意双类型转换和所有的括号!它看起来很复杂,确实如此。它只有一行,而不是我们之前看到的if子句的长向量。但它只适用于你之前设置的标签,也许在加载事件:
button1.Tag = 0;
button2.Tag = 1;
button3.Tag = 2;
...
所以你必须先投资,然后才能收获。
这里有很多要消化…你的选择!
你必须明白的一件事是,你不应该问别人解决问题的方法。然而,既然你的问题需要它。
首先你应该给按钮添加标签来区分它们:
button1.Tag = "1";
button2.Tag = "2";
.
.
.
然后在事件处理程序中将发送方对象强制转换为控件类型:
Button a = (button)sender;
然后检查按钮a的标签以添加频率:
freqArray[Convert.ToString(a.Tag)-48] = freqArray[Convert.ToString(a.Tag)-48] + 1;