如何更新点击按钮的频率

时间:2014-06-06 05:54:11

标签: c#

您好我正在为我的作业写一些代码而且我被卡住了。我为数字按钮创建了一个常规单击事件处理程序:

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];

                }
        }

2 个答案:

答案 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;
...

所以你必须先投资然后才能收获......

在这里要消化很多..你的选择!